【PHP】下らねぇ質問はここに書き込みやがれ 61
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/01/27(日) 18:17:59ID:jK32tI//PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 62
http://pc11.2ch.net/test/read.cgi/php/1199956159/
◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0331nobodyさん
2008/01/30(水) 22:25:08ID:???> Smartyを使いなさい。
CakePHPを使ってから、Smartyに興味がなくなったな。
PHPという言語自体がテンプレートに近いものだから、
ロジックとビューがちゃんと分かれていれば、そのままで問題が無いことに気づいた。
0332nobodyさん
2008/01/30(水) 22:31:46ID:k3DrvwtH> PHP使ってるヤツらって
> htmlspecialchars($_GET['text']);
> こんなコード書いてる!
> m9(^Д^)プギャー
とありますが、上のコードの何が問題なんでしょうか?
教えて下さい。
0333nobodyさん
2008/01/30(水) 22:32:21ID:???>PHPという言語自体がテンプレートに近いものだから、
>ロジックとビューがちゃんと分かれていれば、そのままで問題が無いことに気づいた
同感
0334nobodyさん
2008/01/30(水) 22:32:36ID:???Smartyは協業する上で何かしら標準が必要だから使ってるだけ
これはCakeを使おうが代替できない機能
やっぱフォーム-ロジック-DBの操作を楽にしてくれてウィジットを
サポートするモダンなFWじゃないと
ルール縛りだけではやはり時間が掛かるよ、柔軟性もないし
0335nobodyさん
2008/01/30(水) 22:36:49ID:???> これはCakeを使おうが代替できない機能
なんで?Cakeの方が幅広く協業できると思うけど?
SmartyはCakeのビューの部分だけでしょ。協業できるのは。
> やっぱフォーム-ロジック-DBの操作を楽にしてくれてウィジットを
> サポートするモダンなFWじゃないと
それなら、Smartyなんて問題外じゃん。
0337nobodyさん
2008/01/30(水) 22:38:56ID:???そうするとポストバックが結構面倒だけど、なんかいい方法無いかね。
0338nobodyさん
2008/01/30(水) 22:39:48ID:???読んでないけど、システムの抽象度が低いとかいうことかな
そういうコードをいちいち書くのはうっかりミスという脆弱性の温床になる
しかし標準出力がかってにエスケープされる言語なんて存在しないわけで
小さいアプリじゃごく自然な対応だと思うけどね
あるいはhtmlspecialcharsはNULLですり抜けられた時代に書かれた文章かな
0340nobodyさん
2008/01/30(水) 22:43:08ID:???> ロジックとビューを分けるのってやっぱ物理的にファイルを分けてる?
> そうするとポストバックが結構面倒だけど、なんかいい方法無いかね。
だから、そのいい方法(の一つ)がCakePHPのやり方なんだってw
0342nobodyさん
2008/01/30(水) 22:47:07ID:???貴方はオブジェクト指向病にかかっていると思われ
自力学習の間は時間が無限大なのでそれでやっていけるが
社会に出るとその時間がなくなりスパゲッティーコードを生産する作業に変わりますw
0343nobodyさん
2008/01/30(水) 22:47:32ID:???めんどくさいから正直に書いちゃうけど、バカなワナビー君には理解できないんだねえ
だからその上での議論も成り立たない、言いっぱなしで生産性もない、と
反省しなさいよ
0348nobodyさん
2008/01/30(水) 22:52:56ID:???CakePHPの一部のビューの部分にSmartyを使えばいいだけのこと。
CakePHPはSmartyなんかよりも幅広いものを対象としているので、
それでCakePHPを使わないという理由にはならない。
0351nobodyさん
2008/01/30(水) 22:54:54ID:???CakePHP使ってみようと思ったがなんかキモい奴になりそうでやめたわw
0352nobodyさん
2008/01/30(水) 22:55:30ID:???PHP総合雑談スレ
http://pc11.2ch.net/test/read.cgi/php/1200314111/
0354nobodyさん
2008/01/30(水) 22:56:26ID:???だれがそんなにSmarty使いたいのか知らんけど
幅広いと言ってもCakePHP⊃Smartyでないことはすでに指摘されてる
CakePHPを使わずSmartyを使えと言うレスは見当たらないけど?
0356nobodyさん
2008/01/30(水) 22:56:47ID:???お互い持論を主張して俺様が正しい、って奴ばっかだなw
この業界、こんな人間しかいないのか?w
0358nobodyさん
2008/01/30(水) 22:59:00ID:???お前みたいに「Cake馬鹿」っていって時点で同類だろ
Cake馬鹿程度も受け入れられないんじゃ程度がしれてるわ
0360nobodyさん
2008/01/30(水) 23:01:09ID:???CakePHPを忘れなさい
0361nobodyさん
2008/01/30(水) 23:01:32ID:???CakePHPではコードジェネレータがついている。
といっても一アクション(一ページ)あたりほんの20行程度の短いものだが。
コードジェネレータの出力、もしくはチュートリアルのコードをベースに
そのアプリ独自のロジックを書いていくわけだが、
この標準のやり方が、ポストバックになっているぞ。
(もちろんそうじゃないやり方もできる。)
0362nobodyさん
2008/01/30(水) 23:02:40ID:???忘れてどうするんだw
そのほかのフレームワークを使うっているのなら話はわかるが
ライブラリだけじゃ、この先やっていけないよ?
0364nobodyさん
2008/01/30(水) 23:09:31ID:???0365nobodyさん
2008/01/30(水) 23:10:33ID:???0366nobodyさん
2008/01/30(水) 23:13:12ID:???コードをロジックとテンプレートに分けようと思っています。
そのときなるべく面倒なことはしたくないので、
たとえば、http://localhost/controller/action/123
というアドレスにアクセスしたいとき、
contorllerクラスのactionメソッドを呼ぶようにしたいです。
またそのときに使用するテンプレートを/views/controller/action.ctp ファイルに使用と思っています。
これらは必要に応じて、柔軟に変更できるようにしたいです。
たとえば設定しだいで、http://localhost/123 でもデフォルトの動きとして controller/actionが実行されたりです。
いい関数ありませんか?
0367nobodyさん
2008/01/30(水) 23:13:59ID:???0369nobodyさん
2008/01/30(水) 23:17:50ID:???CakePHPの信者共が出張して宣伝活動していることだけはわかった
いいからCakeBBSに帰れw
0370nobodyさん
2008/01/30(水) 23:19:55ID:???PEARは知識。CakePHPは実践。
0371nobodyさん
2008/01/30(水) 23:23:02ID:???もっと知れ渡るように布教活動でもしてるのか?
0372nobodyさん
2008/01/30(水) 23:25:22ID:???0373nobodyさん
2008/01/30(水) 23:28:41ID:???0375nobodyさん
2008/01/30(水) 23:31:59ID:???0376nobodyさん
2008/01/30(水) 23:34:46ID:???0377nobodyさん
2008/01/30(水) 23:38:34ID:9rDWoCR8環境はmysql 5.0.54、PHP 5.1.6で実行しました。
例えば、
$res = $pdo->query('SELECT avg(column) FROM table');
を実行するとどこかで失敗しているとおもわれます。(エラーは何もない)
このavgを含むとfalseが返されます。
その後に$pdoの中を見ると、通常ではクエリ実行後にはqueryStringプロパティに実行したクエリがセットされるはずですがセットされていません。
もちろん、直接mysqlにこのクエリを打つと正しく返ってきます。
検索してもPDOにそれっぽいバグ報告ありませんが、ご存知の方いませんか?
0379377
2008/01/30(水) 23:44:52ID:9rDWoCR8CakePHPでダメでした。
0382nobodyさん
2008/01/30(水) 23:54:52ID:9rDWoCR8PDOがavgを含むクエリに失敗する理由がわかりますか?
>>381
クエリ自体に問題はありませんが、PDOはいかなるときもgroup byが必要ということでしょうか?
知ってる人が見つかってよかったです。
ありがとうございます。
0383nobodyさん
2008/01/30(水) 23:58:02ID:9rDWoCR8うそつき、ハゲ!
意味なくgroup by入れたけどやっぱりダメでした。
コマンドラインでは成功しました。
PDOはダメってことですか?
0384nobodyさん
2008/01/30(水) 23:59:22ID:???0386nobodyさん
2008/01/31(木) 00:07:26ID:???とりあえずこれ。
0387nobodyさん
2008/01/31(木) 00:08:15ID:???$stmt = $pdo->prepare("select avg(col) ...");
$stmt->execute();
$rows = $stmt->fetchAll();
$stmt->closeCorsor();
だとどう?
0388nobodyさん
2008/01/31(木) 00:16:07ID:???I just recompiled pdo_mysql and the problem was solved.
0390nobodyさん
2008/01/31(木) 00:30:42ID:REX6IFqd$stmt = $pdo->prepare("select avg(col) ...");
の時点でfalseが返ってきます。
>>388
ありがとうございます。
やっとまともな方に答えていただきました。
解決したわけではありませんが、Bug #8045ってことで納得しました。
0391nobodyさん
2008/01/31(木) 00:36:22ID:???0392nobodyさん
2008/01/31(木) 00:57:53ID:???<>"&あたりしか退避しないからurlencodeでもしとけってことかな。
まあ汚染については厳密にやるとCでもPerlでもきりがないし大げさに取り上げるほどのことではない気はした。
0393nobodyさん
2008/01/31(木) 01:08:58ID:???明示的にエスケープが必要なのがプギャーなのかな。
0394nobodyさん
2008/01/31(木) 01:26:32ID:???0395nobodyさん
2008/01/31(木) 02:04:47ID:???> PHP使ってるヤツらって
> htmlspecialchars($_GET['text']);
> こんなコード書いてる!
> m9(^Д^)プギャー
とありますが、上のコードの何が問題なんでしょうか?
教えて下さい。
0397nobodyさん
2008/01/31(木) 02:14:53ID:???0398nobodyさん
2008/01/31(木) 02:21:25ID:???ttp://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/003.html
より良いWebアプリケーション設計のヒント
開発基盤選定における考慮事項の例
(1) プログラミング言語の選択
1) 例えば、PHPを避ける
2) 大規模システムにはJavaや.Netを使う
0399nobodyさん
2008/01/31(木) 02:27:58ID:4JBYr2L1PHPでサイトを作ったのですが、
自分は普通にBBSに書き込めるのに、他の人からBBSに書き込めないという情報をもらい困っています。
下手なソースをアップしてもいいのですが、長いだけにそれも無理そうです。
ログを取ってみたところ、自分は書き込みチェックのフェーズまで進んでいるのに、他の人は書き込み(エラーチェック)フェーズにまでいっていないように見受けられました。
(あくまでも推測)
しかし、次のフェーズへの移行はhiddenで指定しているため、両者に差異はないはずなのです。
環境の違いでもないようでした。
情報が少ないので難しいと思いますが、こういった場合どのような理由が考えられるでしょうか?
もしくは、チェックツールや、どこかソースのミスを判定してくれるところなどはありませんでしょうか。
なにか解決の糸口となりえる情報をよろしくお願いします。
0400nobodyさん
2008/01/31(木) 02:30:45ID:???エラーメッセージを表示する
0401nobodyさん
2008/01/31(木) 02:32:46ID:???そんな便利なもんはないです。
こっちにソースの要所だけでも書いたほうがはやいと思う。
もしくは、分岐ごとに全部条件を出力して相手にどの経路まで進んだか聞いて調べる。
0402399
2008/01/31(木) 02:46:27ID:4JBYr2L1<td><input type="submit" name="submit" value="書き込む"> 名前 <b>:</b> <input type="text" name="name" size="25" value="">
E-mail <font size="1">(省略可)</font> <b>:</b>
<input type="text" name="mail" size="25" value=""></td>
</tr><tr><td><textarea name="bbsfor__text1" rows="8" cols="75"></textarea></td></tr>
</table><input type="hidden" name="userid" value="SS0001">
<input type="hidden" name="bbsid" value="7">
<input type="hidden" name="mode" value="bbs">
<input type="hidden" name="step" value="toukou">
<input type="hidden" name="close" value="0">
<input type="hidden" name="write" value="free">
<input type="hidden" name="ticket" value="6">
</form>
一番怪しそうなところはここの部分です。
書き込めなかったという人の報告によると、書き込みボタンを押したあとに画面がそのままになって、テキストエリアに入力した文字などが消えているそうです。
ただし自分以外にも書き込める人もいます。
0403nobodyさん
2008/01/31(木) 02:47:12ID:???簡単に作るにはいい言語といった上でのことだし
セキュリティがメインのとこだからまだ新しい言語であるphp避けるべきってのはあってる。
0404nobodyさん
2008/01/31(木) 02:47:49ID:???0406nobodyさん
2008/01/31(木) 02:50:22ID:???0407nobodyさん
2008/01/31(木) 02:51:30ID:???ダチにはノートンのリファラ返すように言っとけ
0409nobodyさん
2008/01/31(木) 02:55:41ID:???0410nobodyさん
2008/01/31(木) 03:16:49ID:???phpもwebという仕組みも究極的には、OnとOffの電気信号をやり取りをしているに
過ぎないというベースの考え方から、考える癖をつけた方がいいよ。
枝葉ばかりの方法論に固執せずに、仕組みから考えていく方が応用が利くと思う。
0411nobodyさん
2008/01/31(木) 03:23:30ID:???0412nobodyさん
2008/01/31(木) 03:38:32ID:???セキュリティが向上するとも思えんが
0413399
2008/01/31(木) 03:52:32ID:4JBYr2L1解除してみてテストしてもらいます。
>>411
XSS対策です。詳しくは【PHP サイバーテロの技法 防御と攻撃の実戦】という本に書いてあります。
この本もここの人に推奨されたので勉強のために買いました。
0414nobodyさん
2008/01/31(木) 03:55:42ID:???0415nobodyさん
2008/01/31(木) 07:30:54ID:???もしくは、1つの項目をログファイルに追記で書き込むだけの簡潔なプログラムを
書いてみるとか。
0416nobodyさん
2008/01/31(木) 09:55:14ID:no07dFZMconnect()とpconnect()の違いはなんでしょう?
p-が継続的だとはマニュアルに書いてあるんですが、これはclose()しないと
サーバに付加がかかり続けるということでしょうか?
closeしないで次のページに移動してまたpconnectしたらまた付加がかかって、
それもcloseしないで次のぺーじでpconnectしたらまた… みたいになるのですか?
どうもよくわかりません
そうならないとしても、「継続的」であることでの具体的なメリットって
どんな場合ですか?
0417nobodyさん
2008/01/31(木) 09:56:56ID:???イメージが逆だな。
0418nobodyさん
2008/01/31(木) 10:14:03ID:no07dFZMイメージが逆ってのは、再利用するから接続しなおす負荷(?)がかからないって
ことですね? じゃ、いいことみたいですね
あと、続けて質問ですみませんが、マニュアルを読んでるとclose()してるサンプルって
見たことありません。しなくていいものなんですか?
ブラウザを閉じたら勝手にクローズ。だけど、ページ移動なら接続は
キープされるってことでしょうか?(pconnectの場合)
同一ページで何度も同じ接続処理を書くことってあまりないと思うので、
ページ遷移で持ち越せる位の機能じゃないとpconnectって意味薄そうな気がするのですが…
0419nobodyさん
2008/01/31(木) 10:34:31ID:???ttp://www.php.net/manual/ja/features.persistent-connections.php
0420nobodyさん
2008/01/31(木) 11:00:34ID:???最終的には特定のxmlやらiteratorから別のxmlを作るのが目的。
modelの作成にSimpleXMLElementが使えないかなーと。
生成元からxpathで抽出して生成ノードがコンテナなら抽出元のノードの生成ノードの下にぶら下げる。
次に先程生成したノードをxpathで抽出してぶら下がったノードに相対パスを突っ込んでさらにノード作成、みたいな。
ちとややこしいけど・・・
0421nobodyさん
2008/01/31(木) 11:04:56ID:???pconnect()の対になるclose()は意味が無い。
connect()の対になるclose()はスクリプトの終了の際に
自動的に行われるので大抵の場合はしなくても構わない。
HTTPリクエストで実行されるスクリプトの場合、
接続時間が短く、リソースを掴んだままでも影響が少ないからね。
因みにリソースにはそこでSELECT等して取得したデータも含まれる。
(MySQLの場合)
あとpconnect()によるリソースの再利用だけど
接続文字列が同じだから必ずしも再利用されるとは限らない。
再利用のためのプールが1つではなく、プロセスで1つで
プロセス間でそれを共有しないため。
だから接続をタイムアウトまで最悪上限まで保持してしまう
pconnect()はかえって効率が悪くなる(不具合)場合もあるよ。
httpdの設定とか絡んで要調整。
0422nobodyさん
2008/01/31(木) 11:17:14ID:???SimpleXMLObjectのプロパティ≠子要素だから上のコードには無理がある
addNode()とか定義して自分でXMLオブジェクトを展開して追加するしかないと思うが
SimpleXMLを投げ捨てる、という手も
0423nobodyさん
2008/01/31(木) 11:24:17ID:???0424nobodyさん
2008/01/31(木) 12:00:56ID:???__set使ってればオーバーライドすれば誤魔化せるかなーとか思ったけど見てのとおりの惨敗。
投げ捨てるか、xpathを取得して保管するか、xpathをキーにしてarrayでも作るか、どうするか思考中。
>>723
なんと。情報ありがとうございます。
調べてみて試してみます。
0425nobodyさん
2008/01/31(木) 12:06:11ID:VNDK0Dvo最新バージョンの0.72を使っています
phpはバージョン5系です。
$date = date("Y/n/j G:i", $item['date_timestamp']);
このようにしてRSSの時間を取得するようにしてるのですが、
echo "<li>$date<a href=\"$url\">$title</a> ($p_title)</li>\n";
このように書いて実行してるのですが、なぜか時間表示が全部1970/1/1 9:00になってしまいます。
アドバイスお願いします。
公式サイトではdate_timestampで取得することを進めているのですがどうもうまくできません。
0426nobodyさん
2008/01/31(木) 12:11:55ID:???1970/1/1てことは$item['date_timestamp']が空だね
変数をダンプしてデバグしましょう
0429nobodyさん
2008/01/31(木) 12:36:27ID:???$c1 =100;
}
xxx();
素朴な疑問なんだけどPHP5では
上の例のように参照渡しでかつその変数を省略できるけど
その省略した変数に関数内で値を変更しても大丈夫なのだろうか?
今はパラメータ数を判定して
省略されてない場合にだけ値を変更してるんだけど
そんなの必要ないのかな?
いろいろ探したけど確証が得られなくて・・・
■ このスレッドは過去ログ倉庫に格納されています