【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等)・フレームワークは各該当スレへ
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:???0469nobodyさん
2011/05/18(水) 21:31:34.31ID:???JavaScriptカテゴリにはいない
0470nobodyさん
2011/05/18(水) 21:34:32.53ID:???0471nobodyさん
2011/05/18(水) 21:59:54.46ID:IYv8F7QD$array[] = array('id' =>1, 'pid' => 0);
$array[] = array('id' =>2, 'pid' => 1);
$array[] = array('id' =>3, 'pid' => 2);
と言う配列を↓な感じのツリー構造にしたいのですが、
Array(
[0] => array(
'id' => 1,
'parent' =>0,
[1] => array(
'id' => 2,
'parent' => 1,
[2] => array(
'id'=>3
'parent' => 2
)
)
)
)
再帰しても上手くできません・・・。
function thread(&$array = array(), $pid = null){
if ($pid == $array[$pid]) {
return $array;
} else {
$array[] = thread($array, $array["pid"]);
}
}
0472nobodyさん
2011/05/18(水) 22:41:08.51ID:???メリットが全く理解できないが
$array[0] = array('id'=>1, 'parent'=>0, '1'=>array('id'=>2, 'parent'=>1, '2'=>array('id'=>2, 'parent'=>1)));
var_dump($array);
0474nobodyさん
2011/05/18(水) 22:51:38.92ID:???わかってるよ、整理のために書いただけ
本題の件は pid を元に配列を作ってソートした後にforループで回して入れ子にすればいい
0475nobodyさん
2011/05/18(水) 22:56:59.93ID:???入れ子処理にforループ使うのは同じ
0476。
2011/05/18(水) 23:09:46.63ID:???なんか構造が変なので、pidの重複は上書きになっちまうが・・・
print_r ( thread($array , 0) );
function thread($array , $pid) {
$ret =array();
foreach( $array as $var => $val) {
if($val["pid"]==$pid){
$ret = array("id"=>$val["id"],"parent"=>$pid);
if($r = thread($array,$val["id"])){
$ret[$val["id"]]=$r;
}
}
}
if ($pid == 0) $ret = array(0=>$ret);
return $ret;
}
0478nobodyさん
2011/05/18(水) 23:23:55.97ID:???$array[0] = array('id'=>1, 'parent'=>0);
$array[0][1] = array('id'=>2, 'parent'=>1);
$array[0][1][2] = >array('id'=>2, 'parent'=>1)));
0479。
2011/05/19(木) 00:20:21.07ID:???0480nobodyさん
2011/05/19(木) 00:32:04.14ID:???子要素はchildかなにかにいれてく感じで・・・
0481。
2011/05/19(木) 00:42:13.74ID:???$array[] = array('id' =>1, 'pid' => 0);
$array[] = array('id' =>2, 'pid' => 1);
$array[] = array('id' =>3, 'pid' => 2);
$u = &$ret;
foreach($array as $var => $val) {
$u[$var] = $val;
$u = &$u[$var];
}
0483nobodyさん
2011/05/19(木) 01:02:48.42ID:???最近こういうこと多いね
0484nobodyさん
2011/05/19(木) 01:46:05.62ID:???0485nobodyさん
2011/05/19(木) 03:48:14.86ID:0muGXop6データベース板、最近見に行ったが、過疎ってるぽいな。
変なレスばっかりだし、情報源として役に立つのかな…。
こういうの調べるとき2chが頼りだったんだけどな。
0486nobodyさん
2011/05/19(木) 04:11:25.54ID:???なんでPHPに限定するんだ
あっちも質問があったらすぐレスつくぐらいの活発さはあるぞ
0487nobodyさん
2011/05/19(木) 04:13:07.35ID:???先入観もってないで聞いてみればいいのに
スレあげれば目立たないスレでも目立つでしょう
0489nobodyさん
2011/05/19(木) 08:39:07.31ID:???0490471
2011/05/19(木) 11:46:33.75ID:Wi9MRWQP>>476さんのやり方で概ね出来そうです!
$arrayにpidが無い(0)の配列が複数ある場合、
なぜかその配列は消えてしまいますが、
ヒントをいただいたので自分で考えてみます。
色々と検証していただき、ありがとうございました。
0492nobodyさん
2011/05/19(木) 17:44:12.88ID:???0493nobodyさん
2011/05/19(木) 20:04:27.79ID:???0494nobodyさん
2011/05/20(金) 01:37:18.49ID:???0495nobodyさん
2011/05/20(金) 09:57:40.57ID:???0496 忍法帖【Lv=5,xxxP】
2011/05/20(金) 12:42:24.57ID:lhmTdNY3いつかは変数が衝突すんじゃないかと、不安になる。
perlみたく局所化できないし
コードの量が増えるとやっぱOOPでこれを回避するしかないんでしょうか?
0497nobodyさん
2011/05/20(金) 12:58:38.20ID:???名前空間は必要になるかもしれんけど
0498nobodyさん
2011/05/20(金) 13:18:58.34ID:???0499nobodyさん
2011/05/20(金) 14:22:06.44ID:???後から衝突したり、変更しなければ行けない時があるからね。
特に間違った英名を使っていた時とか・・・
0500nobodyさん
2011/05/20(金) 14:27:19.40ID:???0501nobodyさん
2011/05/20(金) 14:49:57.20ID:???0502。 ◆oDupeixhZv52
2011/05/20(金) 14:56:43.66ID:???クラスや関数なら衝突分かるんだし。
0503nobodyさん
2011/05/20(金) 15:39:17.40ID:???$str = "[A1]";
を eregi("^\[([a-zA-Z0-9]+)]",$str) でマッチさせようとしたら
[ABCDE]だけマッチして[A1]がマッチしないんですがなぜでしょう?
0504nobodyさん
2011/05/20(金) 15:45:15.85ID:???×eregi("^\[([a-zA-Z0-9]+)]",$str)
○eregi("^\[([a-zA-Z0-9]+)\]",$str)
ちなみにPHP5.2.10(Win32)を使用してます。
0505503
2011/05/20(金) 15:56:35.21ID:???正規表現云々以前の問題だったようで、上記でマッチしました。
0507nobodyさん
2011/05/20(金) 20:38:14.44ID:bTEqIegR0508nobodyさん
2011/05/20(金) 20:52:22.34ID:bTEqIegRprint_r($A_array);
Array
( [0] => http://xxx/A.html
[2] => http://xxx/C.html
[3] => http://xxx/D.html
[5] => http://xxx/F.html
[7] => http://xxx/H.html
)
print_r($B_array);
Array
( [0] => http://zzz/a.html
[1] => http://zzz/b.html
[2] => http://zzz/c.html
[3] => http://zzz/d.html
[4] => http://zzz/e.html
[5] => http://zzz/f.html
[6] => http://zzz/g.html
[7] => http://zzz/h.html
)
この二つの配列を比較して$A_arrayのkeyの順番で$B_arrayの値を取りたいです。
私が望むのは$A_arrayの0,2,3,5,7と同じ場所だけ取りたいので$B_arrayはこういう風にとりたいです。
Array
( [0] => http://zzz/a.html
[2] => http://zzz/c.html
[3] => http://zzz/d.html
[5] => http://zzz/f.html
[7] => http://zzz/h.html
)
何かいい方法や良い関数やなどあるでしょうか?説明わかりにくかったらすいません><
0510nobodyさん
2011/05/20(金) 21:00:24.87ID:???単純に大文字か小文字かの差だけなら
lowercase使えばいい
phpだと正式な関数名わからないけど大文字を小文字にする関数
php lowercaseでぐぐればたぶん出てくるだろう
0511nobodyさん
2011/05/20(金) 21:02:22.38ID:???0512nobodyさん
2011/05/20(金) 21:03:28.27ID:???いやrss取得してるんだけどたまに順番がずれて取得されてしまう。
データベースに登録してある分と比較して新着だけ登録したいんだけど
順番ずれるとほかの登録する情報までずれちゃう・・
0513nobodyさん
2011/05/20(金) 21:04:29.91ID:bTEqIegR大文字小文字は関係ない
俺の説明が悪かったかな
■ このスレッドは過去ログ倉庫に格納されています