トップページphp
1001コメント313KB

【PHP】下らねぇ質問はID出して書き込みやがれ 104

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/02/14(月) 16:45:59ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 103
http://hibari.2ch.net/test/read.cgi/php/1295956018/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0352nobodyさん2011/02/22(火) 23:31:03.67ID:???
またコテハンの>>349がおかしなレスしてるぞwww
0353nobodyさん2011/02/22(火) 23:34:56.89ID:???
webcronとか
0354nobodyさん2011/02/22(火) 23:43:18.78ID:???
>>349
お前の回答はいつも回りくどい。
0355nobodyさん2011/02/22(火) 23:54:20.38ID:???
>>349

1.var_dumpの後に<br />が無いので続く出力がくっついて醜いです。
2.bin2hexの出力が全て繋がってしまいます。16バイトとかで区切らないと醜いです。
3.やり方しだいですがprintfには書式に%Xがあります。コードが醜いです。
4.エンコードを変換する前後の文字列をvar_dumpしていますが、文字化けして醜いです。
5.brと/の間にはスペースを入れましょう。醜いです。

総合得点100点中5点

コーディングには作成者の性格が現れるといいます。もうすこしがんばりましょう。
0356nobodyさん2011/02/22(火) 23:55:22.28ID:???
そこまでいじめてやんなよ
0357 冒険の書【Lv=2,xxxP】 (´・ω・)ス2011/02/23(水) 00:26:28.19ID:???
(つд⊂)エーン
0358nobodyさん2011/02/23(水) 02:32:48.02ID:???
>>351
メール受信がネックになるようだったら受信するかどうかを乱数で決めればよく。
十分なPVがあることが前提だけどね
0359nobodyさん2011/02/23(水) 02:39:20.51ID:aCifZZvQ
GDライブラリで画像にテキストを合成しようと考えています。
テキストやフォントサイズはGETから(<img src=gd.php?text=テスト&size=20のように>)操作できるのですが
画像上に表示したテキストをwidthやheightを指定して移動させたいと思いGETで渡しても反映されません。

どのようにすれば出来ますか?
0360nobodyさん2011/02/23(水) 02:51:42.28ID:???
GETで渡された情報をコードに反映する
0361nobodyさん2011/02/23(水) 02:53:29.92ID:???
画像上に表示したテキストって何?
何をしたいのかよくわからんけど、「どのようにすれば出来ますか」じゃなくて
自分が書いてうまくいかなかったソースを提示して疑問点を明確にするように
0362nobodyさん2011/02/23(水) 02:55:04.91ID:aCifZZvQ
>>360
それをやっていますが反映されません。
理由がわからないので質問させて頂きました。
0363nobodyさん2011/02/23(水) 02:57:15.59ID:aCifZZvQ
まだ粗すぎるコードですが…

<?php echo "<img src=./gd.php?q=".$_REQUEST[q]."&text=".$_REQUEST[text]."&fontsize=".$_REQUEST[fontsize].">"; ?>
<br><br>
<form action="" method="get">
<input type="hidden" name="q" value="<?php echo $_REQUEST[q]; ?>">
<input type="text" name="text" value="<?php echo $_REQUEST[text]; ?>"><br>
【文字サイズ】<br>
<SELECT NAME="fontsize">
<OPTION VALUE="40">普通
<OPTION VALUE="25">小さめ
<OPTION VALUE="60">大きめ
</SELECT><br>
【文字の移動】<br>
縦に<input type="text" name="h" value="<?php echo $_REQUEST[height]; ?>" size="10">移動する<br>
横に<input type="text" name="w" value="<?php echo $_REQUEST[width]; ?>" size="10">移動する<br><br>
<input type="submit" value="加工する">
0364nobodyさん2011/02/23(水) 02:59:29.81ID:aCifZZvQ
こちらがgd.phpの中身です。
$width = 100-$_REQUEST[width]等、色々いじってみましたがフォントの位置のパラメータは渡せませんでした。

<?php
$font_size = $_REQUEST[fontsize];
$red = 100;
$green = 100;
$blue = 200;
$text = mb_convert_encoding($_REQUEST[text], 'utf-8', 'auto');
$path = "./img/".$_REQUEST[q].".jpg";

$width = $_REQUEST[width];
$height = $_REQUEST[height];

$font = "./APJapanesefontF.ttf";
$image = @imagecreatefromjpeg($path);
$col = ImageColorAllocate($image, $red, $green, $blue);
ImageTTFText($image, $font_size, 0, $width, $height , $col, $font, $text);

// jpeg出力
header("Content-type: image/jpeg");
Imagejpeg($image);
imagedestroy($image);
?>
0365nobodyさん2011/02/23(水) 03:01:23.89ID:aCifZZvQ
value="w"となっていますが、これをwidthに合わせても駄目でした。
0366nobodyさん2011/02/23(水) 03:02:04.54ID:aCifZZvQ
×value="w"
×name="w"
0367nobodyさん2011/02/23(水) 03:06:07.61ID:???
まず質問。
$_REQUEST[q] って何?
0368nobodyさん2011/02/23(水) 03:11:29.95ID:???
まずは_REQUESTの中身を見ろ。そうすりゃわかるだろ
0369nobodyさん2011/02/23(水) 03:12:00.55ID:aCifZZvQ
ユーザーに登録して貰った画像に付けるユニークなキーのつもりです。
良い案が思い付かなかったのでこんな感じにしました。
0370nobodyさん2011/02/23(水) 03:12:23.10ID:???
あと、配列のキーはシングルクォートで囲むクセをつけるといい。ダブルではなく、シングル。パーサに優しくな。
0371nobodyさん2011/02/23(水) 03:14:14.14ID:???
そもそもの問題は、gd.phpにパラメータを渡していないこと。
0372nobodyさん2011/02/23(水) 03:17:50.61ID:aCifZZvQ
いや…他のパラメータは渡っていますし
$_REQUEST[width]にも値が入っていて
gd.phpの側でも受け取れているはずなのに反映されないからおかしいなぁと思いましてですね。
GD固有の癖でもあるのかと思って質問させて頂いたのですが。
0373nobodyさん2011/02/23(水) 03:21:46.06ID:aCifZZvQ
あ、すみません。出来ました。

×<?php echo "<img src=./gd.php?q=".$_REQUEST[q]."&text=".$_REQUEST[text]."&fontsize=".$_REQUEST[fontsize].">"; ?>
○<?php echo "<img src=./gd.php?q=".$_REQUEST[q]."&text=".$_REQUEST[text]."&fontsize=".$_REQUEST[fontsize]."&width=".$_REQUEST[width]."&height=".$_REQUEST[height].">" ; ?>

こうでした。
お手数掛けて申し訳ありません。
0374nobodyさん2011/02/23(水) 03:22:11.52ID:???
そのとおりだね。よかったね
0375nobodyさん2011/02/23(水) 03:29:57.56ID:???
>>373
実際に使うときは$_REQUESTの値を直接吐き出さずにちゃんとエスケープ処理してね
0376nobodyさん2011/02/23(水) 03:37:26.40ID:???
gd.phpに対してsubmitするフォームなの?
そうでないなら$_REQUEST[width]には入ってないと思うんだけど。。。
0377nobodyさん2011/02/23(水) 03:39:42.31ID:???
>>375
実体参照化はエスケープではない
0378nobodyさん2011/02/23(水) 03:48:36.16ID:???
>>376
どこにsubmitしてるかくらい>>363見りゃわかんだろ
0379nobodyさん2011/02/23(水) 04:02:11.12ID:???
>>377
その意味でエスケープということもある
HTML Entity のことを英語でも HTML Escape Character や HTML Escape Symbol などとも呼ぶ
0380nobodyさん2011/02/23(水) 04:40:44.10ID:???
>>378
じゃあ
> $_REQUEST[width]にも値が入っていて
が的外れなことにもつっこんでやれよ
0381nobodyさん2011/02/23(水) 04:52:15.95ID:???
>>380
その直後の>>373で出来たって言ってるんだからつっこむ暇無いだろうが
つーか終わったネタにいつまでグジグジ言ってんの?
0382nobodyさん2011/02/23(水) 05:24:49.99ID:???
こんなんだからPHP使うのはクズっていわれるんだろうな。。。phpspotが悪か。
0383nobodyさん2011/02/23(水) 06:16:02.36ID:???
>>379
それは誤用
0384nobodyさん2011/02/23(水) 13:45:18.97ID:6OM3cecQ
PHPかLinuxなのか迷ったがこっちで聞かせて。
wordpress使おうと思って、色々と必要なものをインストールした。
が、mysql.soとpdo_mysql.soがロードされない。

OSはCentOS5.5。 PHPは5.2.17。
/etc/php.d/mysql.iniにはextension=mysql.soは書かれている。
phpinfo()で確認しても、ちゃんとmysql.iniは読み込まている。
extension_dir(だっけ?)もちゃんと正しく表示されていて、
そのディレクトリの存在も確認したし、その下にmysql.soもあった。
apacheのログを見ても特にエラーはなし。

の、状態でphpinfo()で表示される諸々の情報で、
pdo_mysqlやmysqlが出て来ないのはなぜでしょう?
スレチだったら、Linux板行ってきます。
0385nobodyさん2011/02/23(水) 13:53:38.29ID:???
php.iniに直書きしてみる、もしくは、/etc/php.d/*をincludeするようになってるか確認
0386nobodyさん2011/02/23(水) 13:55:14.84ID:???
追加、Apacheの再起動してみる
0387nobodyさん2011/02/23(水) 14:01:23.50ID:6OM3cecQ
>>385
おけ。ありがとう。
でも、phpinfoで読まれてるっと表示があるのに
読まれないってこともあるんですかね。
仕事終わって帰ったら試してみます。

ぐぬぬ。
0388nobodyさん2011/02/23(水) 14:06:08.45ID:bwOUGcGJ
>>384
個別でインストールしたの?
それともyumで?
0389nobodyさん2011/02/23(水) 14:09:41.62ID:6OM3cecQ
yumでインスコしましたよん。
ちなみに依存関係とかってありますかね?
同じ設定方法で、mbstringとか、pdo_sqlite とかは読めてるんですよね。
0390nobodyさん2011/02/23(水) 14:27:14.79ID:???
n
0391nobodyさん2011/02/23(水) 15:00:25.47ID:Ql2fJWu6
ZendFrameworkの方でも質問しているのですが、
こちらでも投稿させていただきました。

【OS名】CentOS
【PHPのバージョン】5.1.6
【連携ソフトウェア】MySQL ZendFramework
【質問内容】
MySQLにレコードを登録するプログラムを組んでいます。

ブラウザからアクセスしてプログラムを実行すると
ちゃんとDBに登録されるプログラムを
コマンドラインで実行するとエラーが出てしまいます。

エラーには
SQLSTATE[HY000]: General error: 2053
と表示されます。

ほかにはスタックに
Zend_Db_Statement_Pdo->fetchAll()
でエラーが発生しているかのように出ておりました。

エラーを解消するにはどの様にすればよろしいでしょうか。
よろしくお願い致します。
0392nobodyさん2011/02/23(水) 15:10:00.76ID:???
>>389
yum install php-mysql
0393nobodyさん2011/02/23(水) 15:17:28.66ID:6OM3cecQ
>>392
んー。それは済ませてあります。
現に、mysql.soは存在してるので...。
帰ったらもう一度試してみますです。
0394nobodyさん2011/02/23(水) 16:20:19.40ID:???
>>383
PHP公式マニュアルでも「エスケープ」が使われてる

http://www.php.net/manual/ja/faq.html.php#faq.html.encoding
例2「ブラウザはエスケープされたシンボルを解釈する」
http://www.php.net/manual/en/faq.html.php#faq.html.encoding
Example #2「browser will interpret the HTML escaped symbols」
03953852011/02/23(水) 16:38:29.70ID:???
>>387
> phpinfo()で確認しても、ちゃんとmysql.iniは読み込まている。
ごめん。みおとしてた。

phpinfoはWeb経由で?それともCLIで?
extension行がコメントアウトされてるってことは、、、ないか。
0396nobodyさん2011/02/23(水) 16:50:57.68ID:3aR5DZo1
会員登録系のパスワードの保存ってどうしてますか?
md5でハッシュにして保存、ログインの時もidとハッシュにしたパスワードでDBをcountして1であればokにしています。
0397nobodyさん2011/02/23(水) 16:52:16.20ID:6OM3cecQ
>>395
両方とも試してみましたですよ。
mysql絡みだけ表示されませんでした。
今コソーリ社内の環境と、昨晩の記憶を思い返して比較したけど、mcript なんて入ってたかな?と。
それがmysql.soをロード出来ない理由かは?ですが。
社内にPHPerやlinux使いがいなくて聞けない(涙)
0398nobodyさん2011/02/23(水) 17:05:29.73ID:???
仕事中にコソーリ2chに書き込むのは問題ないのかw
0399nobodyさん2011/02/23(水) 17:07:03.39ID:???
>>396
だいたいそんな感じだけど、それだけだと怖いので、
$salt = "tekitou";
$row['password'] = sha1($salt.$password);
な感じでDBに格納してるかな。$saltはこっちが決めた適当な文字列。

登録のときもログインのときも、SQLインジェクション対策忘れずにね。
0400nobodyさん2011/02/23(水) 17:18:27.25ID:???
mysqlが起動していないとかいうオチではないだろうな。
0401nobodyさん2011/02/23(水) 17:22:21.80ID:???
>>399
ユーザーごとにsaltを別々にしなきゃ駄目
0402nobodyさん2011/02/23(水) 17:57:37.72ID:3aR5DZo1
>>399, 401
ありがとうございます。
書き忘れましたが、keyを付けてハッシュにしています。
keyはユーザーごとにランダムに生成した物で、idとkeyのレコードがあるテーブルを作って、
idからkeyをgetしてそれで判定するって感じでしょうか?
04033912011/02/23(水) 18:03:44.99ID:Ql2fJWu6
その後調べたら
PDOからエラーコード:HY093
というのが返ってきているのがわかりました。

色々とサイトを見ると無効なパラメータ番号という意味だと書いてありました。

ブラウザから動かすとちゃんと動くのに
バッチからだとHY093と出る理由がまだ分かっていないのと
HY093に対する対策も未だわかっておりません。

どなたかわかる方がいらっしゃいましたら
アドバイスをお願いいたします。
0404nobodyさん2011/02/23(水) 18:13:01.75ID:???
>>402
いいんじゃない
もっともハッシュには完全な一意性は無いので別のパスワードが偶然一致する可能性も皆無ではないけど
0405nobodyさん2011/02/23(水) 18:15:58.84ID:???
>>403
とりあえずquery前後のソースを書いてみたら?
材料が無いので答えようが無い
0406nobodyさん2011/02/23(水) 18:26:11.88ID:???
>>403
ブラウザ経由とCLIで異なるバージョンのPHPやMySQLが実行されてる可能性は?
HY093が無効なパラメータならプリペアードステートメント周辺が何か間違ってるんじゃないの?
04074032011/02/23(水) 18:45:09.73ID:???
>>405 >>406
ありがとうございます。

すみません。自己解決しました。

ブラウザ経由の場合は
phpMyAdmin使ってのクエリー実行だったんですが
CLIの場合はバインドを使ってまして、
プレースホルダの設定をしている配列を渡さなければならないところで
nullを渡しているのが原因のようでした。

ここで報告するのも恥ずかしいくらいのポカミスです。
ほんとお騒がせいたしました。

0408nobodyさん2011/02/23(水) 19:15:05.76ID:???
ミスなんて大抵そんなもん
0409nobodyさん2011/02/23(水) 19:22:29.33ID:???
よくありすぎるw
0410nobodyさん2011/02/23(水) 20:29:56.99ID:???
>>394
http://www.w3schools.com/tags/ref_entities.asp
http://www.iana.org/assignments/character-sets
http://www.faqs.org/rfcs/rfc1345.html
ISO-8859-1の規格にはHTMLエンティティ化のことをエスケープ化であると言っている表現などない
0411nobodyさん2011/02/23(水) 20:32:51.28ID:???
>>410
そりゃそうだろう
PHP等のプログラム内で文字をHTMLエンティティに変換することをエスケープと呼ぶ場合があるわけだから
ISO規格に規定される概念ではない
0412nobodyさん2011/02/23(水) 20:35:00.94ID:???
>>410
http://www.google.co.jp/search?q=htmlspecialchars%E3%80%80%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97
誤用だろうがなんだろうがこれだけ定着してんだから細かいことにこだわんなよw
0413nobodyさん2011/02/23(水) 21:01:49.59ID:???
誤用が定着すると、正しい用法が廃れてくれて、
元の意味も忘れ去られてくれるまで、会話が
不便なんだよな。
下手すると、リアルで罵り合いになるw
0414nobodyさん2011/02/23(水) 21:11:29.58ID:???
ヒント:「日本語の乱れ」
0415nobodyさん2011/02/23(水) 21:14:34.29ID:???
>>411-412
それは始めに誰かがHTMLエンティティ化とは何かを正しく理解しないまま
イメージだけで勝手にそう呼び始め、更にそれを見た初心者が鵜呑みにして
呼ぶようになったから広まっただけで、誤りは誤り。
広く使われているからそれでいいという思考停止的考えは良くない。
0416nobodyさん2011/02/23(水) 21:18:56.42ID:???
>>415
誤用厨に正論は無力。
HPがHPをHPと略すのはやめろ。むしろ、HPはWPと略すべきっていう
意見広告まで出してたけど、HPはHPの略として定着してしまい、HP
がHPのことであったことなど忘れ去られている。
0417nobodyさん2011/02/23(水) 21:34:43.04ID:???
>>415
じゃぁあんたは「エスケープ」という言葉をどう厳密に定義して使ってるの?
そもそも「HTMLエンティティ化」って単語はどうなのよ
>>410の文書に「HTML Entity」って熟語が1回でも登場してるか?
それこそ造語じゃないのか?
04183842011/02/23(水) 23:54:43.33ID:???
やっとこさ家に帰ってきてマシン立ち上げた・・・。

「動 い て る じ ゃ ね ー か !!」

確かに、昨晩はapacheの再起動はやりまくったが・・・
マシンの再起動はしていませんがなorz=3。
レスくれたみんなありがとう。お騒がせいたしますたm(__)m
0419nobodyさん2011/02/24(木) 00:05:16.57ID:???
画像掲示板でアップされたファイルをfileに入れてるんだけど

+-- file [777]  ←ここのファイルの拡張子を全部変えたい

たとえばjpg→pngに全部変更するのにどうやって変更するんですか?
0420nobodyさん2011/02/24(木) 00:35:26.65ID:???
>>419
sudo rm -rf /
0421nobodyさん2011/02/24(木) 01:45:38.92ID:???
リネームでいいのかい
04224192011/02/24(木) 01:56:26.84ID:???
>>421
リネームでございます
0423nobodyさん2011/02/24(木) 02:05:07.17ID:???
じゃあ保存するときに別の名前で保存する。
既存のファイルはシェルでやるといいよ。
0424nobodyさん2011/02/24(木) 03:05:51.94ID:???
【OS名】WindowsXP
【PHPのバージョン】5.2.9
【連携ソフトウェア】Ajaxplorer 3.2.1
Ajaxplorer 3.2.1のコードを解析しているのですけど分からなくなったので質問があります
ファイルの一覧を表示している画面で、ファイル名にシフトJISコード表の点46行目(死・斧など)の文字が含まれていると、ファイルがディレクトリとして判定されてしまいます
コードを解析してみると/plugins/access.fs/class.fsAccessDriver.phpの544行の is_file($path."/".$nodeName) で誤判定が出ているようです
ここを !is_dir($path."/".$nodeName) に変更すると誤判定はなくなりますが、その後の処理で上手く行きません
これが何故発生するのか原因が分かる人いますか?
AjaXplorer 2.6までは大丈夫なので設定は問題ないと思います
0425nobodyさん2011/02/24(木) 03:23:09.25ID:???
スレタイ
04264242011/02/24(木) 04:07:25.49ID:s60KqhRT
すれ違いかIDを出せば良いのか分からないけど
とりあえずIDの出し方テスト
0427nobodyさん2011/02/24(木) 04:08:27.81ID:???
なにそれふざけてるの?
0428nobodyさん2011/02/24(木) 05:34:34.30ID:AKmJ91ZX
定数って何のために使うんですか?
変数じゃ駄目なんですか?
ハッタリで定数を使っていると中級者っぽいですか?
0429nobodyさん2011/02/24(木) 05:37:30.00ID:???
変わらない値を入れるのが定数
変わる値を入れるのが変数
0430nobodyさん2011/02/24(木) 06:17:08.33ID:???
>>422
> jpg→pngに全部変更
リネームでいいんだwww
0431nobodyさん2011/02/24(木) 06:21:13.72ID:???
>>428
定数はヒアドキュメントに直接展開できないからちょっと面倒
0432nobodyさん2011/02/24(木) 10:02:48.13ID:???
クッキーの勉強をしているのですが、下のPHPの実行の段階でsetecookieで毎回エラーを吐かれてしまいます。

<?php
$myId = $_POST['my_id'];
$password = $_POST['password'];
$save = $_POST['save'];

//Cookieに保存
if($save == 'on'){
setcookie('my_id', $myId, time() + 60 * 60 * 24 * 14);//2週間クッキーを保存する
$message = 'ログイン情報を記録しました';
}else{
setcookie('my_id');
$message = '記録しませんでした';
}
?>

教科書には「setcookieはheaderファンクションのように先頭にプログラムを記述しましょう」と書いてあるのですが、いまひとつ理解できません…
エスパースレではないのは承知なんですが…よろしくお願いします…
0433◆oDupeixhZv52 2011/02/24(木) 10:13:00.44ID:???
エラーを書いてよ。
0434nobodyさん2011/02/24(木) 10:27:57.24ID:LwPaJ6B6
すみません、久々にWindows使って、PHP5.3にて
c:\php\go-pear.bat
を実行するとエラーになるのですが・・・

ここ(http://iwbc.info/archives/820)を参考にしてみたのですが、
例えばHtml_Menuをインストールしようとすると、何か今までのPHP5.2と違って変なErrorやWarningが出ます
解決方法は無いのでしょうか?
上記のサイトのようにするしか無いのでしょうか?
0435>>4322011/02/24(木) 10:32:39.89ID:???
>>433
レスありがとうございます。下記がエラーです。
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\sample17.php:1) in C:\xampp\htdocs\sample17.php on line 8
と出ていました。line 8というのは、>>432の時間の設定をしてあるほうのsetcookieです。
0436nobodyさん2011/02/24(木) 10:45:23.66ID:???
>>435
PHPコードの前に<html>だとか空白だとか改行だとか出力してんじゃないの
0437◆oDupeixhZv52 2011/02/24(木) 10:45:56.52ID:???
>>435
ファイルがBOM有で保存と予想。
0438nobodyさん2011/02/24(木) 10:47:51.29ID:???
>>434
ttp://ameblo.jp/phpwalker/entry-10422457243.html
0439>>4322011/02/24(木) 11:18:38.22ID:???
PHPコードにあったTabを消したら正常に処理されました!
お騒がせしてすみませんでした!
0440nobodyさん2011/02/24(木) 15:42:44.76ID:d+AsvlaB
PHPのログインシステムを開発することになったのですが、一般的に
どういった手法がとられているのかお伺いしたくこちらに書き込ませて
いただきました。

私が現在実装しているものは、下記となります。

■ログインフォームからの入力値と照合させ、通った場合、下記の
  ようにsession_idをセッションに保存

  $_SESSION['authentication'] = sha1(session_id());

■ログイン後はDBとの通信はせず、上記で保存されたセッション
  情報を照合させることにより、認証させる。

if($_SESSION['authentication'] == sha1(session_id())){
  認証成功処理
}
else{
  認証エラー処理
}

なにか足りない点や、セキュリティ等の考え方から根本的に誤りが
ある場合は、ご指摘いただけますと幸いです。

よろしくお願いいたします。
0441nobodyさん2011/02/24(木) 16:09:59.16ID:???
>>440
セッション変数はセッションIDと一対一なので不要

# ログイン処理
if (認証が成功した?) { $_SESSION['authenticated'] = true; }

# 認証が必要なページ
if (empty($_SESSION['authenticated'])) { 認証されていないアクセス }
0442nobodyさん2011/02/24(木) 16:30:07.96ID:???
>>441
>セッション変数はセッションIDと一対一なので不要

言われて気づきました。
たしかにおっしゃるとおりですね。
ありがとうございます。

if (empty($_SESSION['authenticated']))
これだけで認証を通すことは特に問題ないでしょうか。
セッション自体をのっとられることがない限り、ということだと思いますが、
いままでPerlでやっていたときは、ページアクセスごとにわざわざパラメータ
にもたせているID、暗号化パスワードをDBと照合させていたので。。

初歩的で申し訳ないです。
0443nobodyさん2011/02/24(木) 17:49:57.36ID:???
>>442
セッション変数はサーバーサイドで保存されている
という事はそれが改ざんされないよう設定を気をつける
例えば共有サーバーを使ってて
session.save_path が共有されているとかね
http://www.php.net/manual/ja/function.session-set-save-handler.php
の例を見たらPHPのセッションがどう実装されているのか分かると思う

セッションハイジャックやセッション固定攻撃はまた別問題なので割愛
0444nobodyさん2011/02/24(木) 20:07:59.39ID:xAv2QTQ5
ファイル構造を勉強できるサイトってないですかね?
何作ってもMVCにしたくなって、手間がかかって仕方ないんです・・・
特にclassとか使わないのに。
0445nobodyさん2011/02/24(木) 20:31:21.17ID:???
1行目と2行目と3行目の関連性が分からん
とりあえず言えることは、君に必要なのは自己制御能力ではないか
0446nobodyさん2011/02/24(木) 20:31:35.32ID:???
フレームワーク使って開発すればいい
意識しないでもMVCになるだろ
0447nobodyさん2011/02/24(木) 20:53:19.77ID:xAv2QTQ5
普段はCakePHPを使ってるのですが、
Cakeを使わないようにしようと思っても、
いつの間にかそう言う書き方になるんです・・。

小規模なサイトやお問い合わせフォーム程度のものでも
わざわざMVCにする必要ないとは思うので、
どういう構成が適切なのかと思い、質問しました。
0448nobodyさん2011/02/24(木) 21:10:23.55ID:???
>>447
フレームワークスレに行けば?
0449nobodyさん2011/02/24(木) 21:12:17.73ID:???
もしかして>>235
0450nobodyさん2011/02/24(木) 21:47:05.14ID:???
>>443
専用サーバを使用してますが、session_save_pathは自前で作った
ディレクトリに設定してます。ありがとうございます。

とりあえずログインしたあとのセッションに認証通過のフラグを
いれ、それのみの管理で認証管理ができるということがわかりま
したので、大変助かりました。
ありがとうございました。
0451nobodyさん2011/02/25(金) 01:27:04.03ID:???
CakePHPは小規模開発得意やろ
何に悩んでんだ一体
■ このスレッドは過去ログ倉庫に格納されています