【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カテゴリ)の各スレで
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では
上の例のように参照渡しでかつその変数を省略できるけど
その省略した変数に関数内で値を変更しても大丈夫なのだろうか?
今はパラメータ数を判定して
省略されてない場合にだけ値を変更してるんだけど
そんなの必要ないのかな?
いろいろ探したけど確証が得られなくて・・・
0431416
2008/01/31(木) 13:12:48ID:???詳しい説明ありがとうございます
かなり深いですね、、適当やってると痛い目見そうだし
もっと参考書でこういうの説明して欲しいんですが、してないですよねー
プロセスとかの基本用語から理解なきゃダメですね ありがとう
0433nobodyさん
2008/01/31(木) 14:06:44ID:???> PHP使ってるヤツらって
> htmlspecialchars($_GET['text']);
> こんなコード書いてる!
> m9(^Д^)プギャー
とありますが、上のコードの何が問題なんでしょうか?
教えて下さい。
0435nobodyさん
2008/01/31(木) 14:48:21ID:???・test1.php
・test2.php
・entry.php
http://test.com/test1.php?a=1
このtest1.phpの中に以下のimgタグを
埋め込んでtest2.phpを呼び出しているとします。
<img src='http://test.com/test2.php?a=<?php echo $a; ?>' width='0' height='0'>
で、このtest2.phpの中にさらに
下記のようなimgタグを埋め込んでいるのですが、
<img src='http://test.com/entry.php?a=<?php echo $a; ?>' width='0' height='0'>
当然動作しません。
このtest2.phpの中でなんらかの方法でentry.phpを
呼び出して、aの値を登録したいのですが
どのようにすればよいのでしょうか・・・
そのやり方を教えて欲しいです。
よろしくお願いいたします。
0437nobodyさん
2008/01/31(木) 14:53:10ID:89mDm5mU失礼しました。
で、質問させてください。
・test1.php
・test2.php
・entry.php
http://test.com/test1.php?a=1
このtest1.phpの中に以下のimgタグを
埋め込んでtest2.phpを呼び出しているとします。
<img src='http://test.com/test2.php?a=<?php echo $a; ?>' width='0' height='0'>
で、このtest2.phpの中にさらに
下記のようなimgタグを埋め込んでいるのですが、
<img src='http://test.com/entry.php?a=<?php echo $a; ?>' width='0' height='0'>
当然動作しません。
このtest2.phpの中でなんらかの方法でentry.phpを
呼び出して、aの値を登録したいのですが
どのようにすればよいのでしょうか・・・
そのやり方を教えて欲しいです。
よろしくお願いいたします。
0438nobodyさん
2008/01/31(木) 15:08:35ID:???何がしたいのかわからん
entryにtest2の画像のimgタグ、test2にtest1の画像のimgタグを入れてるってこと?
0440429
2008/01/31(木) 15:22:24ID:qO0TdOQJfunction xxx(&$c1=null) {
$c1 =100;
}
xxx();
素朴な疑問なんだけどPHP5では
上の例のように参照渡しでかつその変数を省略できるけど
その省略した変数に関数内で値を変更しても大丈夫なのだろうか?
今はパラメータ数を判定して
省略されてない場合にだけ値を変更してるんだけど
そんなの必要ないのかな?
いろいろ探したけど確証が得られなくて・・・
0442nobodyさん
2008/01/31(木) 15:30:35ID:xq4Ruxkp1:$_SESSION変数で、それぞれのデータを全て持ち回す方法
(例)
$_SESSION['name'] = 'name';
$_SESSION['email'] = '[email protected]';
2:セッションキーを生成して、$_SESSION['session_key']にキーのみ持ち回して
データはオブジェクトをシリアル化して、キーをファイル名とする一時ファイルに保存する方法
(例)
$_SESSION['session_key'] = '4hak2ajh8adjkeubz'; //実際はユーザごとにユニークな値を生成
$file = file("/tmp/" . $_SESSION['session_key']);
$data = unserialize(base64_decode($file['0']));
3:$_SESSION['data']にオブジェクトをシリアル化して、1つの$_SESSION変数だけ持ち回す方法
(例)
$_SESSION['data'] = base64_encode(serialize($data));
$data = unserialize(base64_decode($_SESSION['data']));
どれが一般的なのでしょうか?
0445nobodyさん
2008/01/31(木) 16:28:44ID:???変数の不変性から言って多いに問題があるのだけど、
そんなの関係ねーと小島よしおを信仰しているなら、
それも一興といわざるを得ない。
0446nobodyさん
2008/01/31(木) 16:43:09ID:???0447nobodyさん
2008/01/31(木) 16:49:35ID:???0448nobodyさん
2008/01/31(木) 17:20:24ID:Zzvt9fFUtestesc の $char に\に続く一文字だけ該当するように想定していますが
何故か \"のときだけ " ではなく \" 2文字が引数に渡されてしまいます。
これはどこに問題があるのか教えてください。
<?php
$in = '\\\\abc\tdef\\"';
$out = preg_replace('/\\\\(.)/e', "testesc('$1')", $in);
echo 'input [' . $in ."]\n";
echo 'output [' . $out ."]\n";
function testesc($char){
if($char=='"'){
return '"';
}elseif($char=='\\"'){
return '?';
}elseif($char=='\\'){
return '\\';
}elseif($char=='t'){
return "\t";
}else{
return '';
}
}
?>
実行結果
input [\\abc\tdef\"]
output [\abc def?]
0449445
2008/01/31(木) 17:22:23ID:???私が言いたいのは、返すことが予定されている変数を呼び先で勝手に変えてはいけないという意味で不変性と言っている。
OOP志向から自明の理であるが、使用貸借契約と消費貸借契約における客体を想像すれば分かりやすい。
0450nobodyさん
2008/01/31(木) 17:25:32ID:???0451nobodyさん
2008/01/31(木) 17:31:15ID:B+pFj7HJプログラム練習として自分なりのクローラーを作ろうとしています
現在はネットワークを縦横無尽に走るものではなく、
自分で用意した一つのサイトのトップページを指定し、
そこから同サイト内の全ページをDBに登録するプログラムを作っています
流れ的にはこうです
1. file ()でトップページを取得
2. 1.で取得したページからurlを抽出しリスト化
3. 2.で取得したurlからリンク先のページ内容を取得
4. DB(MySQL)にurlと対応するページ内容を追加、または更新
(レコードが追加か更新かは、DBにそのurlがあるかないかで判断する)
5. 3と4をループ
ここまではうまくいっていますが、質問があります
もしurlから取得したページがたまたま503だった場合、追加も更新も行わないようにしたいのです
その場合、分岐させていけばいいのだと思い、下のようなものを考えました
if(ページ内容が空じゃない){
ページ内容をデータベースに登録する
}
しかし、自分のページが503になったことがないので試せないのです
これで合っているのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています