【PHP】下らねぇ質問はID出して書き込みやがれ 103
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/01/25(火) 20:46:58ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 102
http://hibari.2ch.net/test/read.cgi/php/1292670453/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ 出来るだけスレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・IDを出さない場合、偽者や成りすましの出現を覚悟すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に極力IDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0669nobodyさん
2011/02/08(火) 03:01:08ID:???<?php
$_SESSION['token_a'] = $token;
?>
<input type="text" name="user[name]" value="">
<input type="text" name="user[code]" value="">
<input type="hidden" name="token[A]" value="<?php echo $token ?>">
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
確認フォーム
<?php
if( $_SESSION['token_a'] != $_POST['token']['a'] ){
//入力へリダイレクト
}
?>
<input type="hidden" name="user[name]" value="<?php echo $_POST['user']['name'] ?>" />
<input type="hidden" name="user[name]" value="<?php echo $_POST['user']['code'] ?>" />
<input type="hidden" name="token[A]" value="<?php echo $_POST['token']['a'] ?>">
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
登録フォーム
<?php
if( $_SESSION['token_a'] != $_POST['token']['a'] ){
//入力へリダイレクト
}
//値チェック
//登録
//登録完了
//セッション削除
?>
0670nobodyさん
2011/02/08(火) 03:02:57ID:???別画面はtoken[B]にすればいいんじゃね
別に同一セッションキー使う必要なくね?
0671nobodyさん
2011/02/08(火) 03:07:16ID:???何で入力フォームでトークンを発行してるの?
実登録は確認後なんだから意味ないと思うんだけど…
0672nobodyさん
2011/02/08(火) 03:12:00ID:???token発行
入力画面表示
↓
token存在確認&同一か確認
確認画面表示
↓
token存在確認&同一か確認
↓
登録
↓
登録完了
token削除
どこがおかしいのかな?www
0673nobodyさん
2011/02/08(火) 03:15:08ID:???おかしい
画面遷移で入力→登録なフローがあるならそれでもいいが
入力→確認→登録なら確認の時にトークンを発行するのが正しい
tokenが何の為にあるのかちゃんとした知識をつけな
0674nobodyさん
2011/02/08(火) 03:18:11ID:???一回登録されたら消えるんだから
確認画面をurl直接入力しても確認画面表示されないし、
完了後戻るで確認画面に行ってsubmitしてもセッションのtoken消えてるし
何が問題なんだよ?
0675nobodyさん
2011/02/08(火) 03:22:08ID:???tokenはmd5又はsha1を使用したとして入力→確認の遷移の度にハッシュ作成のコストと32-40byte無駄なPOSTをおくるわけ
大規模なWebサービスでそれやる人間がいたら俺は駄目な奴の烙印を押す
理由はtokenが何の為にあるのか理解せず使用しているから
0677nobodyさん
2011/02/08(火) 03:32:48ID:???意味もわからず風潮のみで使用して無駄なコストを払ってるのは大手サイトでもよくある事
理由無くjsをheadで定義するサイトなんてごまんとあるしね
0678nobodyさん
2011/02/08(火) 07:01:14ID:???0679nobodyさん
2011/02/08(火) 07:35:01ID:???0680nobodyさん
2011/02/08(火) 07:50:01ID:???いいかもね、ただ、へたすると社会が回らなくなるくらい浸透しちゃったからなあ。
0681nobodyさん
2011/02/08(火) 08:11:25ID:???0682nobodyさん
2011/02/08(火) 08:13:34ID:???0683nobodyさん
2011/02/08(火) 08:17:08ID:???0684nobodyさん
2011/02/08(火) 08:43:16ID:???東熱で、月額定額制以外の高画質ムービー購入に
必要なポイント的なもの。
1トークン=1US$
まとめ買いで割引あり。
0685nobodyさん
2011/02/08(火) 08:47:27ID:???それなら入力データをトークンをキーに複数
セッションに保存すればいいな
0686nobodyさん
2011/02/08(火) 08:50:31ID:???プログラミングを初歩からやりなおせ
0687nobodyさん
2011/02/08(火) 08:52:50ID:???せっかく教えてあげたのにw
東熱のシステム見ておいで。
金のやりとりがあるから、キッチリ作ってある。
エロ動画も見られて一石二鳥だよ。
0688nobodyさん
2011/02/08(火) 08:59:18ID:???0689661
2011/02/08(火) 10:47:23ID:???>>668
>後、そのケースだとトークンはcsrf対策にはならん
>トークンで対応出来るのはgetで登録出来るフローのみ
これはどういうことですか?
postでの送信にトークンはcsrf対策にならないってことですか?
>>669
if( $_SESSION['token_a'] != $_POST['token']['a'] ){ の検証処理ですが、
フォームごとにトークン格納用セッションを作るわけですよね。
この処理だと同じフォームのウィンドウを複数開いた時に、
先に開いた方のフォームが確認ページで不正処理されることになりませんか?
全く別のフォームを開いた時にしか機能しないんではと。。
登録後のセッション削除処理完全に忘れてました、気付かせてくれてありがとうございます。
>>673
たしかに確認画面でのトークン生成で十分ですね。
入力画面開くたびに余分な32バイト負荷かけるなんて考えもしませんでした
ありがとうございます
673さんはどうやって「複数画面(フォーム)での平行処理&CSRF対策」やってるんでしょうか?
0690nobodyさん
2011/02/08(火) 11:02:53ID:???http://takagi-hiromitsu.jp/diary/20060409.html
0691nobodyさん
2011/02/08(火) 11:14:47ID:???0692nobodyさん
2011/02/08(火) 11:27:13ID:???ほれ、いろいろ足らんだろ。
0693nobodyさん
2011/02/08(火) 11:58:41ID:???0694661
2011/02/08(火) 12:03:47ID:???ありがとうございます
それ両方とも読んだんですが、例に挙がってる確認画面でのpost値の保持が
hidden形式なので(高木さん)、自分のセッションに丸ごと入れるやり方だと
まんま流用できるとこまでいかないんです。
「まんま流用しないで自分で応用しろよ」て話だと思いますが
それで考えた方法が>>666です
入力〜確認〜登録 のフォームでの確認画面以降からのデータの持ち回し、
みんなhiddenでやってるわけじゃないですよね。
自分みたいにセッションに入れてる人もいるはずで、その場合どうやって
「複数画面(フォーム)での平行処理&CSRF対策」やってるんでしょうか?
ほんと長々すみません。
0695nobodyさん
2011/02/08(火) 12:11:34ID:???0696nobodyさん
2011/02/08(火) 12:46:02ID:LUHffT0l簡単な質問しか回答付いてるの見たこと無いです
0697nobodyさん
2011/02/08(火) 12:53:24ID:???0698nobodyさん
2011/02/08(火) 15:29:01ID:jnZsUAPHこういうの作る場合ってどのような技術が必要ですか?
0699nobodyさん
2011/02/08(火) 15:32:11ID:???0700nobodyさん
2011/02/08(火) 15:33:35ID:???0702nobodyさん
2011/02/08(火) 15:39:26ID:???サーバ側で計測するにしても完了通知を出さないといけないのでPHPだけじゃ出来ません
0703nobodyさん
2011/02/08(火) 15:43:30ID:???ダウンロードが完了しました 100MB 5秒とか出るやつね
かかった時間とロードしたデータ量から算出する
まぁJavaScriptスレにでもいってください
0704nobodyさん
2011/02/08(火) 15:45:21ID:jnZsUAPH共用サーバじゃ無理で専用サーバが必要ってことですね?
0705nobodyさん
2011/02/08(火) 15:48:32ID:???まぁ心配するほど人来ないと思うけどな
0706nobodyさん
2011/02/08(火) 16:20:08ID:jnZsUAPHありがとうございました
0707nobodyさん
2011/02/08(火) 16:25:52ID:???0708nobodyさん
2011/02/08(火) 18:33:20ID:???0709nobodyさん
2011/02/08(火) 18:53:25ID:???どうすればいいですか?
0710nobodyさん
2011/02/08(火) 20:11:28ID:???0711nobodyさん
2011/02/08(火) 21:26:18ID:???痛い部分を消毒したナイフで切り取って生理食塩水で10分間煮沸してください。
ラップで包んで1時間ほど冷蔵庫に寝かしたあと、塩を揉みこみながら耳たぶの柔らかさになるまでこねてください。
消毒した型に入れて180度のオーブンで15分間加熱し、常温まで冷やしてから元の位置に装着してください。
0712nobodyさん
2011/02/08(火) 23:29:44ID:???defined を or で二つ書くのはどういう意味があるんでしょうか?
0713nobodyさん
2011/02/08(火) 23:47:54ID:???疲れてるのかな
0714nobodyさん
2011/02/08(火) 23:50:09ID:???0715nobodyさん
2011/02/08(火) 23:58:22ID:???【PHP】下らねぇ質問はID出さずに書き込みやがれ 1
http://hibari.2ch.net/test/read.cgi/php/1289117484/l50
0716nobodyさん
2011/02/09(水) 00:30:56ID:NvsGmr7wecho flush() 後に session_start() を使用するにはどうすれば良いでしょうか
0717716
2011/02/09(水) 00:41:10ID:NvsGmr7w二度目以降の session_start() ではヘッダーは送信しない等
@演算子でエラーを抑制せずに利用できる方法・設定を教えてください
0718nobodyさん
2011/02/09(水) 05:21:55ID:???【PHP】下らねぇ質問はID出さずに書き込みやがれ 1
http://hibari.2ch.net/test/read.cgi/php/1289117484/l50
0719nobodyさん
2011/02/09(水) 06:21:07ID:???質問が高度すぎるので、僕を含めここの住民には答えられません。
ここで質問するなら、print文にカッコは必要ですか?とか
そういうレベルの質問にしてください。
0720nobodyさん
2011/02/09(水) 07:47:59ID:???>並列アクセスを実現するため
>$_SESSION を利用するたび session_write_close() しないといけない
並列アクセスの実現と$_SESSIONの利用は別々に考えましょう。
0722nobodyさん
2011/02/09(水) 09:53:50ID:???回答が高度すぎるので、僕を含めここの質問者には理解できません。
ここで回答するなら、print文にカッコは必要ですが何か、とか
そういうレベルの回答にしてください。
0723nobodyさん
2011/02/09(水) 10:38:31ID:???session_write_close() 後に、(その後読み込みするまでに)ほかのアクセスで変更があったものを
ページの再読み込みなく読み込みたいってことでしょうか。
いらんでしょ、そんなの。
読むだけなら、さっきよみこんだ SESSIONでいいわけだし、まだ書き込みたいなら closeすべきじゃないし。
0724nobodyさん
2011/02/09(水) 11:45:18ID:???0725nobodyさん
2011/02/09(水) 11:52:02ID:???0726nobodyさん
2011/02/09(水) 12:02:16ID:???0727nobodyさん
2011/02/09(水) 12:17:03ID:???0728nobodyさん
2011/02/09(水) 12:28:34ID:gKogpxd1けれども会社の標準から外れていると言われ不採用になりました。
どうしてもPHPで開発したいんです。
どうすれば良いですか?
0729nobodyさん
2011/02/09(水) 12:30:07ID:???0730nobodyさん
2011/02/09(水) 12:35:47ID:???プログラマしか調達できなくてしょうがない以外に選ぶ理由ないと
思うけどなw
0731nobodyさん
2011/02/09(水) 12:38:41ID:???0732nobodyさん
2011/02/09(水) 12:39:08ID:???0733716
2011/02/09(水) 12:59:48ID:NvsGmr7wありがとうございます
はい、再読み込みなく書き込みたいということです
セッションファイルをロックしてしまうから、session_write_close() で解放しないともう一つのスクリプトが session_start() で止まってしまうんです
0734nobodyさん
2011/02/09(水) 13:51:11ID:???ロックしてしまうって、ページの表示処理が終われば勝手にcloseするんだから、
session_write_close()は、その解放待ちをなるべく早く終わらせたいって時に使うものですよ。
たぶん勘違いしてる。
0735nobodyさん
2011/02/09(水) 14:22:26ID:???0736nobodyさん
2011/02/09(水) 15:06:13ID:i4dE8PNb.htaccess内で
AddHandler application/x-httpd-phpcgi .php
と記述しPHPをCGIモードで動かしていますが
この記述があると
php_value auto_prepend_file がうまく効きません。
AddHandlerの記述をコメントアウトすると効きます。
CGIモードだと効かないのかと思い検索したのですが
それっぽい記述はありませんでした。
CGIモードで、php_value auto_prepend_fileを効かせる方法があればご教授ください。
0737nobodyさん
2011/02/09(水) 15:46:08ID:???むしろ.htaccessとhttpd.confに設定を書けるのがapacheモジュールと
して実行している場合の例外なのです。
5.3.0以降でサポートされた.user.iniファイルを使うか、読み込む
php.iniファイルを別に用意してPHPRC環境変数で指定する、あたり
かな。
0738nobodyさん
2011/02/09(水) 16:12:29ID:i4dE8PNbありがとうございます。
PHPのバージョンは確認した所5.2.5でした。
CORESERVERでPHPRC環境変数を指定する方法がわからないので
少し調べてみます。
0739nobodyさん
2011/02/09(水) 17:34:43ID:i4dE8PNbphp.iniで設定する事ができました。
ただ、php.iniの適用範囲はphp.iniが置かれたディレクトリのみのようで
これは、全ての下位ディレクトリにもphp.iniをアップロードする必要があるということでしょうか?
なにか1つでも設定が変わった場合に、全てのファイルを書き換えるのは面倒だと思いますが
一般的なサイトでもこういった運用なのでしょうか?
0740nobodyさん
2011/02/09(水) 18:08:50ID:???>>737が書いてるようにPHPRCでphp.iniを指定すればいいんじゃないの?
試してないけど.htaccessにこれでどう?
SetEnv PHPRC /dir/php.ini
0741nobodyさん
2011/02/09(水) 18:09:06ID:???多分面倒だから.user.iniという仕組みが追加されたんだと思う。
でも.htaccessでPHPRCをSetEnvすれば下位ディレクトリでも
効いたような?
0742nobodyさん
2011/02/09(水) 18:12:02ID:???0745nobodyさん
2011/02/09(水) 21:05:15ID:YG/3/1p4> 理由無くjsをheadで定義するサイトなんてごまんとあるしね
jsを<head>内に書くのと<body>内に書く違いを教えてほしい
さんざんぐぐって結局明示的なこと書いてるサイト見つけられなかった
0748745
2011/02/09(水) 22:00:14ID:YG/3/1p4なるほど、わかった
スレチすまんかった
0749nobodyさん
2011/02/09(水) 22:07:17ID:???>>745
理由はjsの<script src=によるロードはページのブロッキングがおきるから
だから例外を除き最後に書くのが今の常識
詳しくはjavascript load blockingでググるといい
0750716
2011/02/09(水) 22:18:28ID:NvsGmr7wCometのため、受信用スクリプトを1回のリクエストで掴んだまま、送信用スクリプトをそれとは別に動かそうとしています
他に方法がないようですので、@演算子で妥協することにします
ありがとうございました
0751716
2011/02/09(水) 22:27:49ID:NvsGmr7wすみません読み逃していました
受信用スクリプトで session_start() を 2 ヶ所記述しており
1 ヶ所目が flush() より前にあって、2 ヶ所目がコネクションを掴んだままにするための while 文の中にあります
session_start() によるヘッダー送信を予め抑制する記述方法はなさそうなので、2 ヶ所目に @ 演算子をつけて使うことにします
失礼致しました
0752nobodyさん
2011/02/09(水) 22:28:18ID:???0753nobodyさん
2011/02/09(水) 22:53:19ID:???0754nobodyさん
2011/02/09(水) 23:34:18ID:GiERfPitこれってどういう意味の警告ですか?
読み込んだ文字列をHTMLとしてパースするときにIDの重複箇所があるって意味かと思ったのですが
文字列内にはFOOは一箇所しかありません
<?php
$doc = new DOMDocument();
$doc->loadHTML('<html><body><p id="FOO">FOO</p><p id="FOO">FOO</p></body></html>');
echo $doc->saveHTML();
?>
とIDが重複した簡単な文字列で試してみてもこの警告は出ませんでした
loadHTML()に渡した文字列のIDのことではないのですか?
この警告を消すにはどうすればいいですか
0755nobodyさん
2011/02/09(水) 23:38:03ID:???0756nobodyさん
2011/02/09(水) 23:42:12ID:???0757nobodyさん
2011/02/09(水) 23:44:27ID:???0758716
2011/02/09(水) 23:50:40ID:NvsGmr7wPHPでcometを実現するのはタブーということでしょうか
>>753
セッションファイルへの書き込みのために必要です
改めて見直すと、flush() 後にセッションファイルへの書き込みが必要なキーは、送信用スクリプトでは使わないキーで
そのキーだけ別のセッション名にすることで解決しました
本当に申し訳御座いません
0759nobodyさん
2011/02/09(水) 23:54:11ID:???0761nobodyさん
2011/02/10(木) 04:49:58ID:KBWpaGBGどうすればよいでしょうか? この場合、東京、大阪、京都の順に変えたいです。
Array
(
[0] => Array
(
[number] => 145
[coupon_area] => 大阪
)
[1] => Array
(
[number] => 25
[coupon_area] => 京都
)
[1] => Array
(
[number] => 161
[coupon_area] => 東京
)
)
ksort, usortなどたくさんありますが、どれが適切なのかちょっと混乱してしまい、
質問させてもらいました。
0762nobodyさん
2011/02/10(木) 06:59:19ID:???$ar = Array(
Array("number" => 145, "coupon_area" => "大阪"),
Array("number" => 25, "coupon_area" => "京都"),
Array("number" => 161, "coupon_area" => "東京")
);
var_dump($ar);
$amounts = array();
foreach ($ar as $v) $number[] = $v['number'];
array_multisort($number, SORT_DESC, SORT_NUMERIC, $ar);
var_dump($ar);
0763nobodyさん
2011/02/10(木) 07:00:21ID:???○$number = array();
0764nobodyさん
2011/02/10(木) 07:40:45ID:???0765nobodyさん
2011/02/10(木) 09:20:14ID:???usort($ar,function($a,$b){return $a["number"] > $b["number"] ? -1 : ($a["number"] == $b["number"] ? 0 : 1);});
0766nobodyさん
2011/02/10(木) 12:49:25ID:???phpのメリットってなんですか?
0767nobodyさん
2011/02/10(木) 12:57:00ID:KBWpaGBGありがとうございます。プログラムを参考にググったりして、
こんな感じに落ち着きました。 しかし、usortは難しくてまだちゃんと理解できてない。。
$sales = Array(
Array("number" => 145, "coupon_area" => "大阪"),
Array("number" => 25, "coupon_area" => "京都"),
Array("number" => 161, "coupon_area" => "東京")
);
pr($sales);
usort($sales, create_function('$a,$b',
'return($b[\'number\'] - $a[\'number\']);'));
pr($sales);
0768nobodyさん
2011/02/10(木) 13:42:57ID:???return文の中身は>>765よりそっちのがスマートだな。
create_function使わなくても無名関数でも十分だとは思うが。
■ このスレッドは過去ログ倉庫に格納されています