【PHP】下らねぇ質問はID出して書き込みやがれ 83
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/04/06(月) 04:14:58ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 82
http://pc11.2ch.net/test/read.cgi/php/1236532468/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0524nobodyさん
2009/04/17(金) 17:12:12ID:uEgfagTh1:MySQL上のconfigテーブルを読み込む
2:configに設定してある内容によって処理を分岐
3:ログを書き込む
という処理が発生します。
1アクセスで何回かのSQLを実行することになるのですが、
サイトのアクセスが増えると、処理の負荷などで後々問題になるでしょうか?
現時点では問題ないのですが、先の事を考える時になります。
0526nobodyさん
2009/04/17(金) 17:25:30ID:???configテーブルが満たす仕様による。
高度な検索性を必要とするconfigテーブルでないのなら、そんな設計はやめた方がいい。
0527nobodyさん
2009/04/17(金) 19:34:25ID:hTOqIwMv例えば写真だけ違うの見せたい場合ってPHPが役立つのですか?
0528nobodyさん
2009/04/17(金) 19:35:39ID:???0529nobodyさん
2009/04/17(金) 19:36:03ID:???・DWのテンプレ機能
・PHP
・Java
・Perl
・Ruby
・JavaScript
0530nobodyさん
2009/04/17(金) 19:59:08ID:???0531nobodyさん
2009/04/17(金) 21:19:55ID:???0532nobodyさん
2009/04/17(金) 21:23:35ID:???0533524
2009/04/17(金) 21:58:50ID:uEgfagThそれも考えたのですが、ファイルに書き出すなら
データベースの利便性が失われる気がして悩んでます。。
セキュリティとかも気になるし。
>>526
高度な検索は必要ありません。テーブルからconfigファイルを読み込み
配列に入れて、各条件(ログインなど)の時に参照すると言った仕様です。
0534nobodyさん
2009/04/17(金) 22:04:21ID:3OZ9UJNj(!($fpではなくて
!$fpみたいなコーディングスタイル使ってる?
0535nobodyさん
2009/04/17(金) 22:05:41ID:???0536nobodyさん
2009/04/17(金) 22:08:53ID:???iniとかXMLとかJSONとか、なんでもいいから好きなファイルフォーマットで書き出しておけ。
もしくは単純にPHPコードに配列として書き込む(当然設定だけ別ファイルに隔離)のもアリ。
(本当はあまりよくないのだが、APCなどのキャッシュが効くようになるという大きなメリットがある)
とりあえず、「データベースの利便性」ってなんだ?
上記のような手段ではなく、わざわざ遅く難しいDBに情報を格納している理由は?
0537nobodyさん
2009/04/17(金) 22:16:19ID:???データベースの接続に必要な情報はファイルの方に書き込まないといけないじゃん
その情報を知ってしまえば、わざわざデータベースに突っ込んでも無意味じゃん
それに設定項目が分散しちゃうと、後でめんどくさくなるだけじゃん
0538nobodyさん
2009/04/18(土) 01:11:57ID:???そもそも>>524のキャッシュとして書き出しって意味がわからんな。
一度取ってきたらメモリにキャッシュすればいい。
クラス変数にいれるか、インスタンス変数にいれてsingletonにする。
0539nobodyさん
2009/04/18(土) 01:39:24ID:???ということは、切れたとき使えないときの為のコードも要りますよね?
クライアントが便利になるよという機能であって何かの代わりになるものではないですよね?
例えば、購入履歴とかはログを残しといてアカウントで参照できるようじゃないと
クッキーが有効であっても期限がありますから
ちがうん?
0540nobodyさん
2009/04/18(土) 01:58:11ID:???クッキーは記録を残すための物じゃない。
ログイン状態の保持(セッションキーの保持)専用だと考えていいよ。PHPでは他の用途にはあんまり使わない。
消えたら困るものはクッキーに保存してはいけない。
何かを保存するとしても、掲示板の名前欄みたいな、消えてもいいものだけにしとけ。
0541nobodyさん
2009/04/18(土) 02:14:41ID:???0542nobodyさん
2009/04/18(土) 02:14:48ID:dAOHt7Vpindex.php?i=1や
index.php?i=2といった変数付記でのページURLを、
home.html
news.html
というURLでも呼び出すことができるようにするhtaccess(か何か)の
記述方法があったはずなのですが思い出せません。
home.htmlやnews.htmlはファイルが実際存在するのではなくて、
URLっぽくする(というか、覚えてもらいやすくする)ための便宜ファイル名です。
例えば、ユーザー側――ブラウザ上のURLは「http://www.hoge.com/news.html」となりますが、
実際に呼び出しているファイルはサーバー側ではindex.php?page=1である、といった感じです。
断片的な情報しかなく稚拙な説明で申し訳ございませんが、どうかご教授下さい。
0543nobodyさん
2009/04/18(土) 02:17:52ID:???0545524
2009/04/18(土) 11:10:50ID:RfYbPRbr>>536
DBを使ってない場合は、dat形式にしてファイルに書き出していました。
昔の、CGIの掲示板などを作る時のやり方です。
>とりあえず、「データベースの利便性」ってなんだ?
セットアップの仕組みを作っているのですが、DBで管理する方が
編集しやすいのです。ファイル編集でも出来ますが、手間がかかるし。
それに、有名なオープンソースシステムをみても、だいたいconfigは
DB上で管理しているので、同じようにしたいと思っています。
>>537
データベースに接続する情報はもちろんファイルに書きます。config.phpなどに。
そうじゃなくて、サイト毎の設定ってありますよね?(例えばdate形式とか)
そういう諸々の設定を管理するのにDBを使っています。
>>538
Smartyのキャッシュファイルのイメージで回答しました。
メモリキャッシュしても、ページ推移してたらもう一度読み込む必要がありますよね?
セッションやクッキーを使っても良いのですが、サイト自体の設定を
第三者のファイルにキャッシュするのは問題あると思います。
(認識が違っていたらすみません。もっと勉強します
0546nobodyさん
2009/04/18(土) 11:22:48ID:???実行時に扱いやすいデータに変換したXMLを出力して、こっちを読み込ませてる。
一次データの管理はDBの方が安全だしね。
serializeの方がいいかなぁとも思ったが、なんかあった時にデバッグしにくそうなんで止めた。
後からでも変更できる話だし。
0547nobodyさん
2009/04/18(土) 11:49:03ID:oOFMY9IY何故こういう書き方にするのか、何故こう書いたらこういう風に出力されるのか、といったことがまったく理解できません
フレームワークを始める前にOOPの勉強をした方がよろしいでしょうか?
また、学習の順番としてはクラスの書き方を覚えてからOOPに移行したらいいでしょうか?
0548nobodyさん
2009/04/18(土) 11:49:56ID:???0549nobodyさん
2009/04/18(土) 13:08:50ID:???0550nobodyさん
2009/04/18(土) 13:10:05ID:xPyKg5dr0551nobodyさん
2009/04/18(土) 13:31:21ID:B6cKaOUWユーザ定義関数じゃだめなん??
どういったときにクラスで書くとか
感覚が掴めない
こういうときに必要なんだぜって
やさしく教えてつかあさい;;
0552nobodyさん
2009/04/18(土) 13:39:18ID:???関数も自分でつくらない。必要があれば使えばいいし使わないでもいいなら使わないでもいい。
無理に使う意味なんてないでしょ。
0553nobodyさん
2009/04/18(土) 13:50:08ID:???0554nobodyさん
2009/04/18(土) 13:59:47ID:moRQGLP/0555nobodyさん
2009/04/18(土) 14:06:59ID:B6cKaOUWそう割り切っちゃえば話は簡単なんだが、理解が出来ないってのがつらい;;
>>553
だから、そいつをやさしく教えてくれ;;
そのオブジェクト指向ってのがよくわからんのだ><
0557nobodyさん
2009/04/18(土) 14:14:54ID:???0558nobodyさん
2009/04/18(土) 14:40:42ID:???ウェブプログラムの規模だとクラス使って書いても便利だと実感できないだろ
557 名前:nobodyさん[sage] 投稿日:2009/04/18(土) 14:14:54 ID:???
ウェブプログラムの規模だとクラス使って書いても便利だと実感できないだろ
557 名前:nobodyさん[sage] 投稿日:2009/04/18(土) 14:14:54 ID:???
ウェブプログラムの規模だとクラス使って書いても便利だと実感できないだろ
557 名前:nobodyさん[sage] 投稿日:2009/04/18(土) 14:14:54 ID:???
ウェブプログラムの規模だとクラス使って書いても便利だと実感できないだろ
557 名前:nobodyさん[sage] 投稿日:2009/04/18(土) 14:14:54 ID:???
ウェブプログラムの規模だとクラス使って書いても便利だと実感できないだろ
0559nobodyさん
2009/04/18(土) 15:54:05ID:???・自分の書いたコードを晒して、ヒマな人に添削してもらう
・腕のいい奴の書いたコードを読む
前者のほうが力になりやすいかね。
屑コードを、クラスを使った近代的なコードに書き直していく過程を見るのが一番わかり易い。
そこらで公開されているPHPのコードはゴミと芸術品の両極端が多いから、初級→中級の勉強には微妙。
そこのステップは知識云々じゃなく、考え方の転換を迫られるから、引っかかる奴が多いのは事実。
>557みたいに諦めちゃう人も多いけど、身に着ければ強力で便利なツール。
0560nobodyさん
2009/04/18(土) 15:59:44ID:???受信に使っているプロトコルの仕様にならって実装する
OOPについて勉強したい的な話題はこちらでどうぞ
http://pc11.2ch.net/test/read.cgi/php/1172205352/
0561nobodyさん
2009/04/18(土) 16:01:28ID:???まぁ、なんかWebアプリとかを作成していく中で、
誰かが作成したライブラリだとかPEARだとかを使うことになったとして
そのライブラリがただのユーザ定義関数だけで書かれていて、設定用に
大量のグローバル変数を有していたら、困ったことにならない?
それだけでも、機能の集合がクラスになっているということに意味はあると思うけど。
0562nobodyさん
2009/04/18(土) 17:09:46ID:???どの辺まで理解できて無いかによってはスレ全部埋めることになるが・・・ム板行ったら?
とりあえず全部自分ひとりで趣味レベルのモノ組むのであればオブジェクト指向にこだわる理由は無い。
どーしても理解したいって言うなら、近道は無いとだけ言っておく。
0563nobodyさん
2009/04/18(土) 17:49:55ID:zbLkqu9f20090418162123をいう文字列を(int)を用いてキャストした場合に
なぜか同じ数字ではなく2147483647という数字に変換されてしまいます。
これはどういった問題が考えられるでしょうか?
すいませんがアドバイスよろしくお願いします。
0564nobodyさん
2009/04/18(土) 18:04:18ID:moRQGLP/0565nobodyさん
2009/04/18(土) 18:09:53ID:???0566nobodyさん
2009/04/18(土) 18:10:35ID:???0567nobodyさん
2009/04/18(土) 18:13:15ID:moRQGLP/インスタンス全然つかわんようになったよ。せいぜいmysqliのインスタンス作るぐらい。
staticの方が3倍速いからね
みんなはどうなの?
0568nobodyさん
2009/04/18(土) 18:19:54ID:???0569nobodyさん
2009/04/18(土) 18:26:13ID:???0572nobodyさん
2009/04/18(土) 18:33:40ID:???それを分離して補ってくれるのがフレームワーク
OOPOOP言うのは面倒だからまとめてJavaのサイトで勉強してきなさい
0573nobodyさん
2009/04/18(土) 18:34:42ID:???コードス補完があると便利なんですが
0574nobodyさん
2009/04/18(土) 18:55:58ID:moRQGLP/普及率が高いから。jspやaspは搭載してないレンタルホストがほとんどだしね。
>>569
カプセル化だけほしいんだよね。変数の扱いが楽だから。漢は手続きと言ってみたいけど、へっぽこなので変数汚染しまくり。
0577nobodyさん
2009/04/18(土) 19:36:21ID:???例えばCakeやRailsなどのフレームワークはTableModuleパターンを押し付けてくるが、ストラウストラップのOOPの考え方に一番近いのはドメイン駆動型の設計。
で、フレームワーク上でドメイン駆動設計を実現しようとすると、クラス階層を1枚上に丸ごと被せざるを得ない、というくらい両者は相性が悪い。
(基盤となるM-V-C間の繋ぎこみ自体はポリモーフィックに行なわれている事が多いので、無関係でもないが)
まあ、その「押し付け」のおかげでscaffoldingなどの高い開発効率を確保できるわけで、悪いとは言わないけどな。
少なくとも、MVC構造を理解する事と、OOPの考え方を理解する事は、別の問題と考えるべき。
実際、GoFをひとつも理解してなくともRailsやCakeで生産性は出るし、OOPを突きつめると必然的にRailsやCakeの設計に行き着く、というわけでもない。
0578nobodyさん
2009/04/18(土) 20:16:51ID:???E-TextEditor ttp://www.e-texteditor.com/
EmEditor v9 ttp://jp.emeditor.com/
TextMate ttp://macromates.com/
Redcar ttp://redcareditor.com/
jEdit ttp://www.jedit.org/
0579563
2009/04/18(土) 23:12:47ID:???>>565
>>566
返事が遅くなりすいません。
単純にint型の最大値を超えてた訳ですね。
本当にありがとうございました!
0580nobodyさん
2009/04/19(日) 00:13:57ID:KO8gMtKF【PHPのバージョン】5.2.9-2
【質問内容】
配列の任意の要素を削除する方法はありますか?
先頭や末尾の削除は簡単にできますが、任意の要素の削除ができません。
一応削除したい要素より後ろの要素を一つずつ前に詰めていく方法もありますが、一発でできるような方法があれば教えてください。
0581nobodyさん
2009/04/19(日) 00:32:27ID:???http://jp.php.net/manual/ja/function.unset.php
配列の添字も詰めたい場合は、これに
http://jp.php.net/manual/ja/function.array-values.php
0582nobodyさん
2009/04/19(日) 01:12:04ID:KO8gMtKF解決しました
ありがとうございます
0584nobodyさん
2009/04/19(日) 12:09:11ID:???オブジェクトは、データに処理がくっついたもの。
言ってしまえばそれだけのことでしかない。
OOPを難しく考える必要はないよ。
0585nobodyさん
2009/04/19(日) 12:21:06ID:???ラムダ計算、関数型プログラミングに慣れておくために、LISPも勉強しておくと良いと思います。
0587nobodyさん
2009/04/19(日) 13:10:40ID:???いわゆる Stateパターンとか OOD的にはかなりビミョーと言う認識。
0588nobodyさん
2009/04/19(日) 13:15:49ID:TOquu1lD入力画面→確認→投稿という形で作ってまして
作成手順は入力画面でポストされたものをセッションに代入、
値を保持しながら確認→投稿という形で作成しました。
申し込みフォーム自体は問題がないのですが、
例えば、入力画面から確認に行き、そこから投稿せず会社概要など
他のページに移動して再度入力画面にいくと以前入力された値が
表示されてしまいます。おそらくセッションが残ったままに
なってるのが原因だとは思います。
入力画面←→確認←→投稿は値を保持させ他のページに飛んだ場合は
値を消去するやり方を教えていただけませんか?
アドバイスよろしくお願いします。
0590588
2009/04/19(日) 13:44:00ID:???返信ありがとうございます!
入力画面、確認画面、投稿画面以外の全てのページに
unset($_SESSION['hoge'])を設定しとこうかなとも考えましたが、
もしかしたら違うスマートやり方もあるのかなと思い質問してみました。
0591nobodyさん
2009/04/19(日) 13:46:19ID:???0592nobodyさん
2009/04/19(日) 14:16:20ID:???そうだよな。CakePHPの例で言っても、所謂OOP的な書き方って、Model, Controllerのextendsくらいだもんな。
基本、コンストラクタは省略されてるし、セッター、ゲッターなしにいきなりプロパティ変数に設定値を代入でOKとか。
あと、命名規則とか記述に縛りが多いのも独特。
0593588
2009/04/19(日) 15:05:06ID:???返信ありがとうございます。
hiddenも検討したんですが今回は項目が多く
入力←確認、確認→投稿時に全ての値をセットしないと
いけなくなりますので出来ればセッションでいけたらと思います。
変な質問すいません・・
0594nobodyさん
2009/04/19(日) 15:08:27ID:???0595nobodyさん
2009/04/19(日) 15:18:01ID:???0596nobodyさん
2009/04/19(日) 16:04:10ID:???複数の画面から同じフォームを生成する場合などは、使い回しが効くと非常にラクになる。
2. hiddenは別に面倒じゃない。確認画面は
foreach($_POST as $k => $v) echo "<input type=\"hidden\" name=\"$k\" value=\"$v\">";
でじゅうぶんだろ?(XSSを考え、実際はエスケープする事)。
0597nobodyさん
2009/04/19(日) 17:04:22ID:???まずCAKE使うだけならOOPの勉強しなくても、まぁ使える。
さらにCAKE使ってるとOOPに触れざる得ないから多少慣れるのもいい事かも。
で、クラスの書き方と使い方ぐらい入門系の情報でやっておくとある程度身に付いてくるよ。
0598nobodyさん
2009/04/19(日) 18:56:04ID:???まぁ好きにすれば良いんだけど、自分だったらそのセッションの内容をXMLに変換して、
これをhidden に持たせて、サーバ側ではsimplexml_load_stringでパースする。
0599nobodyさん
2009/04/19(日) 19:09:23ID:???あんま意味ないけどhiddenはbase64_encode(serialize())とかすれば一個ですむよ
とこでいくつかのWebアプリでは、プレビューには投稿画面に入力データのリストを追加しただけのものを表示するね
確認画面というフェーズを新たに作るより省力化になっていいと思う。確認画面から投稿画面にもどって、、、という作業もいらないし
0600nobodyさん
2009/04/19(日) 22:41:24ID:???ここだけケチをつけて済まないが
クライアントに渡すデータは他のフォーマットにしとけ
unserialize()時にコードインジェクションが起きる
0602nobodyさん
2009/04/19(日) 23:14:21ID:cHMoaxlc0603nobodyさん
2009/04/19(日) 23:14:45ID:???0604nobodyさん
2009/04/19(日) 23:17:02ID:???0605nobodyさん
2009/04/19(日) 23:24:48ID:???0606nobodyさん
2009/04/20(月) 15:46:47ID:yRu17DN3$ary[2]= "red";
$ary[3]= "yellow";
$ary[4]= "white";
上記のような配列があって、
一番大きい数字のキー(上記なら4)を取得したいのですが、
$aryをforeachで繰り返してキーを取得するより何かスマートな方法はありませんか?
0607nobodyさん
2009/04/20(月) 15:54:14ID:???0608nobodyさん
2009/04/20(月) 15:54:32ID:???その数値の定義のルールは?
1番目から1、2・・・5ってつけるなら
count($ary)でいけるんじゃね?
キーに文字列とか、飛ばし飛ばしの数値とかだったらループさせないといけないはず
キーソートあったと思うけど、個人的には何か使いたくないな
というか、使う機会がないな
0609nobodyさん
2009/04/20(月) 15:56:10ID:???foreach($ary as $value){
$abc[] = $value;
}
$abc[0];
こうするのがいやってことね。
0611nobodyさん
2009/04/20(月) 16:04:04ID:yRu17DN3>>608
ほんとだ、こんな方法が・・・。
自分の頭の固さを痛感しました。
>>609
ですね。でもシンプルなのが書けそうです。
ありがとうございました!
0612nobodyさん
2009/04/20(月) 16:15:13ID:yRu17DN3結果は同じでも、命令としてはこっちのが命令の意図に近いですね。
どっち使うかちょっと考えてみます。
ありがとうございます!
0613nobodyさん
2009/04/20(月) 16:20:28ID:???http://jp.php.net/manual/ja/function.end.php
で済むけど。
0614nobodyさん
2009/04/20(月) 16:54:04ID:yRu17DN3そんな便利なものが。
今回は取得したキー値を使い回すコード書いてるので、
endは使えませんが今後参考にさせてもらいます。
ありがとうございます!
0615nobodyさん
2009/04/20(月) 18:29:43ID:???意味を取り違えてるかも知れんが、キー値も必要ということなら、
http://jp.php.net/manual/ja/function.key.php で取得できる。
0617nobodyさん
2009/04/20(月) 19:12:07ID:9zjWZummcba
acb
上記の内容のテキストファイルの"cba"の行を削除する場合、どのようなコードを書けばよいのでしょうか?
0618nobodyさん
2009/04/20(月) 19:18:18ID:???0620nobodyさん
2009/04/20(月) 19:39:36ID:9zjWZummありがとうございます。
それと、そもそもファイルの内容を行ごとに配列に格納するのはfreadでも可能でしょうか?
file関数だとロックができないようなんですが…
0621nobodyさん
2009/04/20(月) 19:48:57ID:???$buff = fread($fp, 4096);
$lines = explode("\n", $buff);
とか
0624nobodyさん
2009/04/20(月) 20:29:36ID:???明示的にロックしたいならやっぱflockで
freadはデフォルトでは行末まで読み込みでしょ
■ このスレッドは過去ログ倉庫に格納されています