【PHP】下らねぇ質問はID出して書き込みやがれ 106
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/04/29(金) 17:11:00.40ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 105
http://hibari.2ch.net/test/read.cgi/php/1300302034/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0371nobodyさん
2011/05/15(日) 12:43:24.25ID:???0373368
2011/05/15(日) 21:09:21.05ID:p35+GTTU「うまく実装が出来ません」では何で困ってるのかわからん
ログインの継続という言い方がまずかったですね。
ブラウザを閉じた後や一定時間が経った後でも、1〜2週間くらいログインを継続したいのですが、SESSIONでは実装方法がうまく行かずという感じです。
よろしくお願いします。
0374nobodyさん
2011/05/15(日) 21:15:53.51ID:???0375nobodyさん
2011/05/15(日) 21:18:07.23ID:58gt7XbJ0376nobodyさん
2011/05/15(日) 22:10:07.55ID:JT6jB8NJ【PHPのバージョン】5.2.17
【連携ソフトウェア】MySQL 5.04
【質問内容】
PHPのMySQLに大量のレコードをINSERTしていく処理をしているのだけど、
5百万レコード辺りで勝手に止まります。
以下設定済み。
/etc/php.ini
max_execution_time=86400
/etc/ssh/sshd_config
ClientAliveInterval 60 (sshからPHP実行してるので切断防止)
スクリプト内のテキスト出力を、ob_startして
最後にテキストファイルに書きだすようにしてるので、
メモリ溢れとかでしょうかね?
phpのエラーログは出てなかったぽいのでよくわからず…。
0377nobodyさん
2011/05/15(日) 22:29:49.42ID:???0378nobodyさん
2011/05/15(日) 23:42:40.15ID:JT6jB8NJob_startでメモリ喰われてそうなので、この辺り直してみます。
0379nobodyさん
2011/05/16(月) 02:22:40.22ID:XnN75Tphこういうのたまに遭遇するんですけど、メモリ溢れ特定するうまい方法ありますか?
0380nobodyさん
2011/05/16(月) 02:23:34.89ID:???0381nobodyさん
2011/05/16(月) 09:49:41.50ID:???http://www.php.net/manual/ja/errorfunc.configuration.php#ini.log-errors
http://www.php.net/manual/ja/errorfunc.configuration.php#ini.error-log
0382368
2011/05/16(月) 09:57:16.20ID:0KSOaR/a継続時間は2週間にしてるんですが、なぜか2週間もたないんですよね。
>>375
cookie_lifetimeでも、うまくいかなかったです。。。
0383nobodyさん
2011/05/16(月) 11:12:27.58ID:???0384368
2011/05/16(月) 11:25:18.37ID:0KSOaR/a2週間どころか、1日もたないんですよ。
@ini_set('session.gc_maxlifetime','10368000');
@ini_set('session.gc_divisor','1000');
@ini_set('session.cookie_lifetime','10368000');
@session_start();
超伸ばしてみたりしてますw
ブラウザひらきっぱなしでスリープ状態から復帰すると、ログアウトしてるのが現状です。
0385nobodyさん
2011/05/16(月) 11:46:52.01ID:???切れた頃に他ブラウザからアクセスして
サーバ側のセッションファイルが削除されてないようなら
ブラウザ側で切っちゃってるのかもね
0387368
2011/05/16(月) 16:26:42.69ID:0KSOaR/aあとで試してみます。結果報告しますね。
>>386
コード内で$_SESSIONは特にいじってないんですけどね^^;
上記sessionは、共通でincludeしてあるファイルの一番先頭に書いてます。
0388nobodyさん
2011/05/16(月) 16:29:24.37ID:???0389368
2011/05/16(月) 16:32:32.57ID:0KSOaR/aコード内でsessionに関係するのは、$_SESSIONだけかなと思ったんですが、
それ以外でsessionに影響することってあるんでしょうか?
0390nobodyさん
2011/05/16(月) 16:33:39.26ID:???それから、それを貼ろう。
0391nobodyさん
2011/05/16(月) 16:39:44.84ID:???0394nobodyさん
2011/05/16(月) 17:05:27.61ID:???0396368
2011/05/16(月) 18:09:44.51ID:0KSOaR/asessionに関する最小限のコードは >>384 だけです。全ページ共通です。
ログインしたときは、$_SESSION['hoge']にユーザーIDを入れます。
ページ表示時に$_SESSION['hoge']の値でログイン判断してます。
とりあえず、説明だけでも。
0397nobodyさん
2011/05/16(月) 18:42:04.62ID:???その後半がないから最小限のコードになってないってことじゃね。
再現する最小限のコードを作ってみなよ。その過程で穴が見つかることってよくあるよ
0398nobodyさん
2011/05/16(月) 19:16:20.58ID:???サーバー側でいくらセッションを維持しようと、ブラウザがセッションIDをクリアしてしまえばどうしようもない
どのタイミング(ブラウザを閉じる、スリープになるetc)でIDをクリアするかはブラウザによって動作が微妙に違う
ログイン状態を長期間維持する仕組みは、例えばこうして実現する
1)ログイン時にチケット(uniqidとか色々組み合わせた予測されづらい数字)を発行する
2)サーバー側のDBでユーザーIDとチケットおよびログイン時間を関連付ける
3)チケットをクッキーで食わせる
4)次回ログインページを開いた際、クッキーにチケットがあればログイン時間と見比べてログイン認証を通過
※当然同じチケットを使い続けるのは危険なため、このとき再発行してクッキーを上書きする
0399368
2011/05/16(月) 20:17:12.44ID:0KSOaR/aありがとうございます。
セッションでやらずにクッキーとDB(or ファイル)でログイン状態を維持するように判断させたほうがいいってことですね。
セッションではログインの維持は出来ないって考えてもよろしいんでしょうか?
0400nobodyさん
2011/05/16(月) 20:32:18.26ID:???出来ないというよりやるべきでないといったほうが正解か
0401nobodyさん
2011/05/16(月) 21:11:28.46ID:???0402nobodyさん
2011/05/16(月) 21:36:36.21ID:???勿論採用されるはずもなく(というか採用されれば超ラッキーくらいで、なにか話を訊ければ良いくらいのつもりでした)、話を聞くに、PHPを覚えれば実務経験がなくても突破口にはなると言われました
そこでPHPを勉強しようと思い、参考書、入門書を買おうと思うんですが、何かお勧めの本はありますか?自分のレベルは上記の通り何も知らないです
amazonでは「よくわかるPHPの教科書」がやたら評判が良いのでそちらを検討しているんですが、他に良書があれば是非教えてください
よろしくお願いします
0403nobodyさん
2011/05/16(月) 21:57:46.33ID:???どんだけ多いと思ってるんだPHP技術者()笑が
0404nobodyさん
2011/05/16(月) 22:00:31.66ID:???0405nobodyさん
2011/05/16(月) 22:19:13.42ID:9d+tcru/だがこんなとこで聞いてるようじゃな…
0406nobodyさん
2011/05/16(月) 23:22:02.14ID:???0407nobodyさん
2011/05/16(月) 23:30:22.48ID:???0408nobodyさん
2011/05/16(月) 23:36:18.77ID:???こんな下らない質問なのでこのスレなら平気かなと思い質問しましたが、スレ違いだったようなので失礼します
0409nobodyさん
2011/05/16(月) 23:39:00.78ID:???どんなのでもいいから、Webサイト作って公開して、それ見てもらうのがいいかも。
Windows、Linuxの両方で構築していればなおよし。
ふーん、で終わるかもしれないけど、やってみないことにはわからん。
0410nobodyさん
2011/05/16(月) 23:53:51.23ID:???25になってないなら未経験OKのところに突撃すればいい
JavaとかC#でやってるとこ
そのうちWebの案件もくるだろう
と楽観視できたのが3年ほど前までの話
ここ2・3年は新卒採用さえできない企業が多くなってきてる
PHPの本を探してるなら>>1読めばいいよ
0411nobodyさん
2011/05/17(火) 00:29:04.44ID:???勉強できるとこ証明すればおk
0412nobodyさん
2011/05/17(火) 00:45:25.39ID:???>>398が言ってる事は解決にならん
あんたのやるべき事は問題の切り分けから
<?php session_start(); echo session_id(), ' : ', @++$_SESSION['a'];
これを再現する状態でリロードして…
- IDだけ変わる : ブラウザがCookieを送っていない → HTTPレスポンスのSet-Cookieを確認
- IDもカウントも変わらない : セッションデータが破棄されてる → http://www.php.net/manual/ja/session.configuration.php
- カウントだけ変わる : 問題なし → やったねたえちゃん
0413368
2011/05/17(火) 01:24:57.53ID:uHRzMhgSやったねたえちゃんでしたw
セッションデータもCookieも大丈夫みたいですね。^^;
0414nobodyさん
2011/05/17(火) 01:50:08.87ID:p7ZABAr6DBのトランザクション処理って複数の更新処理がある場合のみにやればいいですか?
それとも更新処理が一つでもあればやるものですか?
0415390
2011/05/17(火) 01:58:30.02ID:???だから言ったのに
>>414
複数の時だけでいいよ。DBアクセスクラスで勝手にトランザクションはるかもしれないけど
0416nobodyさん
2011/05/17(火) 02:07:09.06ID:???0417nobodyさん
2011/05/17(火) 08:40:42.15ID:???データベース板に質問スレがあるからそっちで教えてもらう方がいい
これだけじゃあれなんで、更新以外でも必要になる場合がある
検索結果リストのページングに必要な件数とデータを2回のクエリに分けて取得する場面で
それぞれの取得の合間に他のプロセスがデータを更新・削除すると
データと件数が一致しなくなる
またある一つの条件を基に二つのテーブルからデータを削除する場面で
一方の削除は完了しもう一方のはエラーが発生して中断された場合にも不整合が起き得る
0419nobodyさん
2011/05/17(火) 11:13:48.31ID:???0420368
2011/05/17(火) 11:20:39.08ID:KShR6cC9ブラウザのセッションに対する有効期限は、セッションのクッキーで判断してるんですよね。
ってことは、クッキーのみで実装しようが一緒ってことですか?
0421nobodyさん
2011/05/17(火) 11:26:09.78ID:???>>398の俺俺セッションも無意味だしな
常識的に考えりゃセッションが意図した通りの寿命を持たない原因を突き止めるのが先だろ
0423nobodyさん
2011/05/17(火) 12:07:24.35ID:???お前は>>373を読んでないだろ?
>>422
うん、>>368は自動ログインを求めているからセッションでは実現不可能
0424nobodyさん
2011/05/17(火) 12:17:11.52ID:???0425421
2011/05/17(火) 12:18:03.71ID:???> ブラウザを閉じた後や一定時間が経った後でも
これか、見落としてた悪い
でPHPのセッションもお前も同じCookieを使っているんだが
なんで結果が変わると思う訳?
0426368
2011/05/17(火) 12:21:23.06ID:KShR6cC9そうなんですよ。いろんなサイトを見ても、バラバラなんで^^;
自分もよくわからなくなってきたんで、ココで質問してみました。
0427nobodyさん
2011/05/17(火) 12:46:28.28ID:???ブラウザを閉じたらセッションIDをクリアするのが一般的なブラウザの動作
話がかみ合わないのは「ブラウザを閉じてもセッションを継続」の部分を見逃してるからじゃないの
一部のブラウザではウィンドウをすべて閉じてもセッションIDを維持するようなオプションだか
プラグインがあるけど、それは例外でしょ
0428nobodyさん
2011/05/17(火) 12:58:04.45ID:3Z0Fp5Lshttp://fw.mk-style.com/main.php#/top/
↑はゲームのサイトで、ページを切り替えると、URLは「main.php」以降だけが変わるんですけども。
これの意味が良く分かりません・・。
0429368
2011/05/17(火) 13:07:18.80ID:KShR6cC9オプションやプラグインとか関係なしに、
@ini_set('session.gc_maxlifetime','10368000');
@ini_set('session.gc_divisor','1000');
@ini_set('session.cookie_lifetime','10368000');
@session_start();
の設定で、ブラウザ閉じて、開いても、セッションは維持されています。
ただ、なんらかのタイミングでセッションが破棄されてしまうのも現状です。
その原因がよくわからないんですよね。
すいません。なんか話のポイントわかりづらいですよね。
・ログインの継続がしたい(ブラウザ再起動後も)
・上記設定でブラウザを再起動しても、ログインは維持される
・なんらかのタイミングでログインが維持されない(1日もたないことが多い)
・コード内でログアウト時以外、セッションをいじっていない
上記sessionの設定で、セッションが破棄される(ログアウトする)タイミングは、どんなケースが考えられるのでしょうか?
その部分が分かれば、セッションでも対応できるのかなと。
0430。 ◆oDupeixhZv52
2011/05/17(火) 13:30:21.60ID:???セッション事体破棄できるのはサーバーだけだから、消されてるだけ。PHPじゃない話。
たとえば、セッションIDをgetにつっこむクッキーレスにすれば、ブラウザの問題は分離できるよ。
0432nobodyさん
2011/05/17(火) 13:59:55.43ID:???そのやり方だとセッションハイジャックのリスクがあるんじゃない?
有効期限の長いセッションでURLに埋め込むのはお勧めできない
ジャックされてもいいようなどうでもいいページなら別だけど。
0435nobodyさん
2011/05/17(火) 14:14:24.62ID:???だいたいブラウザ閉じてもセッション維持したいって言ってるのに
毎回ブックマークでもさせるのか?
つーかサーバ側のセッションデータとブラウザ側のクッキーぐらい覗けるようにしとけよ
どんだけこのネタ引っ張るつもりだ
0436。 ◆oDupeixhZv52
2011/05/17(火) 14:15:02.32ID:???ブラウザのことについては、俺もいらんこと書いたな。どっちかというと質問者じゃなくて、
分かってない人向けのいらん一言だったわ。
聞かれてないこと書くのは要らぬお世話になって良くないのが分かったよ。ありがとう。
0438nobodyさん
2011/05/17(火) 15:07:06.72ID:???共有サーバーで session.save_path が共有されている場合は
他人のスクリプトによって消されている可能性がある
あとは他の人が言うようにセッションIDやCookieヘッダのログを取って
ログアウト状態になった時に確認したりね
session_start();
$log = implode("\t", array(gmdate(DATE_W3C), session_id(), @$_SERVER['HTTP_COOKIE'], var_export($_SESSION, true))) . PHP_EOL;
file_put_contents('ここにログファイル名', $log, FILE_APPEND | LOCK_EX);
0439368
2011/05/17(火) 15:42:33.78ID:qipHoIvY再現されるコードを書くとしたら、、、
■ログイン時
<?php
@ini_set('session.gc_maxlifetime','10368000');
@ini_set('session.gc_divisor','1000');
@ini_set('session.cookie_lifetime','10368000');
@session_start();
@session_regenerate_id();
@session_register('ID');
$_SESSION['ID'] = "id";
echo "login ok";
?>
■ページ表示時
<?php
@ini_set('session.gc_maxlifetime','10368000');
@ini_set('session.gc_divisor','1000');
@ini_set('session.cookie_lifetime','10368000');
@session_start();
if(isset($_SESSION['ID']) && $_SESSION['ID'] != null ){
echo "login";
}else{
echo "not login";
}
?>
実際のコードと少し違いますが、コレで再現されるはずです。
>>438
専用のサーバーなんで、パスは大丈夫です。
ありがとうございます。ログを吐き出してみますね。
0440nobodyさん
2011/05/17(火) 16:32:03.90ID:JyZBkyIg【PHPのバージョン】5.2
【質問内容】
// セッション開始
session_start();
// セッションデータを保存
$temp = $_SESSION;
// セッション変数を破棄
$_SESSION = array();
session_destroy();
// セッションを再作成
session_regenerate_id(TRUE);
// セッションIDを作成
session_id($this->makeSessionId("sha1"));
// セッションIDを再生成
session_start();
// セッションデータを元に戻す
$_SESSION = $temp;
【やりたい事】
自前のセッションID作成関数でワンタイムセッションを発行し続けたい
【問題点】
毎回セッションファイルが3つ増えていきます。
SESSIONに保存されたデータが渡されていません。
0441nobodyさん
2011/05/17(火) 17:13:56.35ID:???ウチのDebianのPHP/5.2.6-1+lenny10では問題なし。
ちなみにブラウザはIE6/7/8、Fx4。
リクエスト毎にちゃんとセッションID変わってる。
ゴミセッションファイルも残らない。
セッション変数も受け渡されてる。
レスポンスヘッダのSet-Cookieも重複なし。
0442nobodyさん
2011/05/17(火) 18:13:15.25ID:JyZBkyIgframework使ってた所為でファビコンアクセスで、余計なセッションが1つ出来てた。
デバックツールで更に1個余計だった
ただ、
session_id($this->makeSessionId("sha1"));
これ抜くと問題無いけど、入れると上手く動かなくなる。。。
0444nobodyさん
2011/05/17(火) 20:09:37.08ID:???0445nobodyさん
2011/05/17(火) 22:30:00.58ID:n5tnk9Oo0446368
2011/05/17(火) 23:00:48.90ID:KShR6cC9ログを見てみたところ、なんとなく原因が分かりました。
/tmp/以下のセッションファイルが、あるはあるんですが、
空になってました。。。ブラウザのクッキーは生きてるみたいです。
なんか設定が足りないんですかね。。。
0448368
2011/05/17(火) 23:25:28.48ID:KShR6cC9最初はデータが入っていて、
-rw------- 1 hoge wheel 28 5 17 21:17 sess_de2115feb4047288c2d449474fe728de
と、loginになってるんですが、なんらかの原因で、
-rw------- 1 hoge wheel 0 5 17 21:17 sess_de2115feb4047288c2d449474fe728de
と、/tmp/以下のファイルの中身が空になるみたいです。
0449368
2011/05/17(火) 23:26:46.95ID:KShR6cC9あ、時間はダミーです^^;
0450nobodyさん
2011/05/17(火) 23:52:48.59ID:???0451368
2011/05/18(水) 00:07:54.18ID:yNJD7CyNあ、IDもユーザー名もダミーですw
0452nobodyさん
2011/05/18(水) 00:13:45.36ID:???0454368
2011/05/18(水) 00:37:54.54ID:yNJD7CyNお。。。まさかの再起動wwww確認してみますw
0455368
2011/05/18(水) 00:44:09.95ID:yNJD7CyN大丈夫でしたw
0457428
2011/05/18(水) 04:02:13.97ID:Byk8JbeP失礼しました。
0458nobodyさん
2011/05/18(水) 04:21:34.50ID:???<div name="top">top</div>
<br style="margin-top:2000px">
<div><a href="#top">top</a></div>
と原理は一緒だろ
0459nobodyさん
2011/05/18(水) 04:23:08.75ID:???0460nobodyさん
2011/05/18(水) 04:45:51.42ID:???多分 http://fw.mk-style.com/teaser/swf/website.swf をmain.phpで呼び出し先を変えてるだけ
0461nobodyさん
2011/05/18(水) 04:55:03.43ID:???今のモダンブラウザならURLまるごとかえれるしな
0462nobodyさん
2011/05/18(水) 04:58:14.44ID:???Flash側でふりわけてるんだろう
URLで最初に表示するFlashのコマを決めてるだけにすぎない
0463nobodyさん
2011/05/18(水) 07:22:54.07ID:???0464nobodyさん
2011/05/18(水) 07:25:09.74ID:???0467nobodyさん
2011/05/18(水) 18:16:34.60ID:???JavaScriptカテゴリにはいない
0468nobodyさん
2011/05/18(水) 20:34:30.12ID:???■ このスレッドは過去ログ倉庫に格納されています