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

【PHP】下らねぇ質問はここに書き込みやがれ 39

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/02/12(月) 20:33:59ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 38
http://pc10.2ch.net/test/read.cgi/php/1170520777/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
 しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0548nobodyさん2007/02/18(日) 02:51:52ID:???
じゃあioncube使え。PHPはいいよな隠蔽できるから。
Javaは全部逆コンパイルできるからシェアウェアとか作りづらい。
0549nobodyさん2007/02/18(日) 03:01:54ID:???
ionCubeは高いのが難点だな。
あとライセンス体系も。
0550nobodyさん2007/02/18(日) 03:06:06ID:???
JAVAでも逆コンパイルできないように暗号化できる。
05515292007/02/18(日) 03:15:32ID:???
>>547
実際にやったよ。そんなに疑うならサンプルファイル用意してみろ。
用意したものを元に戻せばおまえさんも納得ですか?
つかクラックなんて超絶に頭の悪い発言したのは俺じゃない。
勝手に>>526と結びつけないでくれ。
内部でbase64_decode使ってるのは事実なんだから妄想も糞もないがな。

>>548
ProGuardが無償で提供されてるだけでも。。
0552nobodyさん2007/02/18(日) 03:15:53ID:???
CPU が解釈できる以上は
どんな言語でも逆アセンブル(逆コンパイル)は可能だろう。
原理的には。
0553nobodyさん2007/02/18(日) 05:22:21ID:???
どうでもいいけど529必死杉
0554nobodyさん2007/02/18(日) 05:31:48ID:???
とりあえず>>526と>>529が馬鹿だということはわかった。
こういう民度の低いのがいるからPHPは見下されるんです。カエレ(・∀・)!!
0555nobodyさん2007/02/18(日) 08:29:46ID:IA/vQM+L
設計に関する質問・相談です。

自分は今まですべてのコンテンツ分の登録・編集機能を用意してて
自由に管理者が投稿出来るようにしたのですが、それを友人に試用して
もらったところ、「投稿したはずの書き込みが別のユーザで反映されている」
との指摘を受けました。(実際は、ユーザIDを間違えて登録していた

会員制の掲示板の場合、書き込みさせたいユーザがログインして書き込むので
ユーザIDが違うと言った問題はないのですが、管理者が管理システムから
書き込めるようにすると、そのような問題が考えられます。

そこで質問ですが、皆さんは会員制サイトを作る時の管理システム(管理者が使う)で、
登録・編集フォームはすべてのコンテンツ分、用意してますか?
もしくは管理者には自由に書き込めないようにしてますか?
自分の調べたところphpBBもOpenPNEも会員としてログインして書き込む形になっていました。
0556nobodyさん2007/02/18(日) 08:55:51ID:???
内容と規模とその時の状況に依るかな。
掲示板みたいな大したものじゃなかったら面倒なので削除だけだし
企業ものだったらほぼ全てっていうかフレームワークでできたcrudそのままって感じだし。
ただsuperAdminの権限を与える場合は
大抵DBも扱えるようにしてるからphpadminとかで勝手にやっちまえ
っていうお話。
05575552007/02/18(日) 09:05:41ID:???
>>556
ありがとうございます。自分用の場合は大体

>大抵DBも扱えるようにしてるからphpadminとかで勝手にやっちまえ
>っていうお話。

で済むのですが、第三者が使う場合、何が一番良いのか迷う時があります。
仕事みたいに依頼されて作る場合は主旨が明確なので作りやすいのですが、
WEBの知識の無い人間に対して利用させる場合、を想定すると実に迷います。

ほぼすべての機能を使えるようにしたら誤った操作をしてしまわないか?
っと思うし、仮に使える機能を制限すると、管理者が投稿する時は
いちいち会員として投稿しなきゃいけなくなる。その点の判断が
いつも迷ってしまい、フローチャートの段階で詰まることも多々あります。
(実は今も詰まってしまい、質問したわけですが...
05585292007/02/18(日) 10:45:39ID:???
>>553-554
何が必死なのか何が民度が低いのか、
レス返しただけなんだけど。
phpのスレでphpについての話題をして
帰れと言い出す>>554の脳はさぞ素晴らしいんでしょうね。

結局>>547はサンプルも用意できずに逃げたみたいだから
出てくるまではこのスレには来ないよ。
0559nobodyさん2007/02/18(日) 11:02:03ID:???
>>529
お前二度とここ来るな
永遠に来るな 今すぐ去れ
0560nobodyさん2007/02/18(日) 12:07:55ID:7ifKcsCF
Fotal Errorの画面ってカスタマイズできない?
正規表現で特定のディレクトリに特定のメッセージ出したりリダイレクトできたらいいんだけど
0561nobodyさん2007/02/18(日) 12:11:13ID:7ifKcsCF
ゴメ
スペルミス
0562nobodyさん2007/02/18(日) 12:29:31ID:???
>>552
て言うか、復号できない暗号化なんて無意味だよ。

アルゴリズムとキーをどれだけ隠蔽できるかの勝負だろ。
0563nobodyさん2007/02/18(日) 13:10:41ID:zIKYxPXS
こんにちわ、お世話になります。

imap_openでopenに失敗した場合に即効で値が返ってくる方法はありませんでしょうか?。
imap_timeoutを使っても時間がかかったりPHPのタイムアウトまで時間がかかってしまいます。
0564nobodyさん2007/02/18(日) 13:14:36ID:???
変数に使うと、定義名を返すような関数はありますか?
0565nobodyさん2007/02/18(日) 13:17:06ID:ix4BYiPN
暗号化の話で盛り上がってるところ悪いけど
くだらない質問を一つさせてください。

例外処理ってどうしてますか?
例えばクラス側では投げるのに徹して、クライアント(実際にブラウザで実行するphp)側で
tryとcatchをするとか、セオリーみたいなのってありますか?

もっと楽そうなのは、投げっぱなしにしておいて
set_exception_handler()で一括処理なんて言うのも考えたんですけど
あんまりしませんか?この方法は問題ありでしょうか?

意見ありましたらお願いします。
0566nobodyさん2007/02/18(日) 13:17:25ID:???
>>557
たとえば削除なら
削除権限をつけた管理者だけが削除フラグを1にでき
かつ管理者の操作ログを保存する。
匿名掲示板程度ならここまで大げさにしないけどね。
0567nobodyさん2007/02/18(日) 13:57:48ID:???
>>560
Apacheが出してるやつならPHPで、カスタマイズしたやつを出力できる筈。
0568nobodyさん2007/02/18(日) 14:58:03ID:???
>>565
セオリーみたいなのがあるかどうかは知らないけど・・・。
throwはとにかく例外的なことが起こったらどこでも投げればいい。
try-catchは、例外から回復するのが目的なので、きちんと意味のわかるところにおいておくのがよい。

まとめられるものはなるべくまとめる方が楽だから、トップレベルで全部catchしたくなるのもわかるけど、それではrobustなシステムは作れない。
クラスの中でもcatchして流れを継続できる部分があるかどうかも検討すべき。

もちろん面倒なときに、「全部まとめてcatch」みたいなことができるのも、この構文の利点ではあるけどね。
0569nobodyさん2007/02/18(日) 15:43:05ID:???
try〜catchって具体的にどういうときに使うの?
マニュアルとか見て意味は分かるけど
具体的な使用例がほしい
どこかのスクリプトで使ってるところありますか?
0570nobodyさん2007/02/18(日) 15:49:02ID:???
Codelockの暗号はbase64_decodeするだけで復元できるとか言ってたバカは、
「復号キー」の存在を知らないのだろうか??
何のための「復号キー」なのだ、と小一時間・・・

まさか試用版の固定された復号キーであるという前提で、「解読できた」とか
言ってんじゃないだろうな?このバカww
0571nobodyさん2007/02/18(日) 16:01:04ID:???
try〜catchはthrowも合わせて使ってようやく本領発揮だよな。
0572nobodyさん2007/02/18(日) 16:07:56ID:K0qFGfn0
gdのリソースを格納した変数を
$img2 = $img1
等の方法で単純にコピーしようとすると
リファレンス渡しになります。
値渡しで丸コピーするにはどうすればよいですか?
0573nobodyさん2007/02/18(日) 16:08:50ID:???
>>572
どうしてリファレンス渡しじゃなくて値渡しにしたいのか?
0574nobodyさん2007/02/18(日) 16:14:40ID:???
画像データを加工するためにコピーしたいんです
05755292007/02/18(日) 16:15:51ID:???
>>570
意味ぐらい知ってるよ。あんたほど馬鹿じゃないんでね。
今日ざっとCodelockの中身を見てみて完全じゃないけどそのキーの発見方法も見つけた。

つか問題なのは複合したあとのコードがいともたやすくデコードできてしまうことだろ?
複合キーで複合したあとのソースなんて難読化のかけらも無い。

実用で使う時には既に複合キーで解除されたあとなんだから何かの手違いでソースが漏れたらやばいだろって話。
おわかり?
0576nobodyさん2007/02/18(日) 16:55:20ID:???
>>575
んなこと言ったら、実行不可能なほどの暗号化しなきゃいけなくなるだろうが。
0577nobodyさん2007/02/18(日) 17:01:54ID:???
>>575
俺もやってみたけど、キーで復号したあとのテキストも、
単純なbase64デコードではごく一部しか復元できなかったが?
05785292007/02/18(日) 17:20:26ID:???
>>576
別にこの製品を否定してるわけじゃないよ。
実行不可能なほどの暗号化をするのはZendとかionCubeとか。
比べれば分かるけど値段が全然違うでしょ。
スクリプト自体に脆弱性があればソースを難読化しようが暗号化しようが問題ありありなのを分かってほしい。

>>577
当たり前。俺の過去のレス読んでよ。
つかデコード方法を解説したらまずいと思うからそこらへんは自分でやって。
0579nobodyさん2007/02/18(日) 18:03:17ID:???
>>578
>実行不可能
「実行」の意味を勘違いしてる気がする。「解読を実行」って意味で使ってるだろ?
そうじゃなくて、「スクリプトの実行」だよ。zendが実行不可能な暗号化するわけないだろw 意味がない。

>スクリプト自体に脆弱性があれば・・・
論点ズレてる。そんなことは今は問題にしていない。
05805292007/02/18(日) 18:08:04ID:???
>>579
Loaderが無ければ実行不可なんだからそういった表現をしたまで。
ほかのスクリプトは単体(サポートスクリプト含む)で動く。

つか論点って何よ。何を気にしたいわけ?
0581nobodyさん2007/02/18(日) 18:33:35ID:???
>>580
必死だなぁ。。。
机上の空論はもういいから、実例を示しなよ。
0582nobodyさん2007/02/18(日) 18:56:36ID:???
スルーできないやつも同罪だろ
05835292007/02/18(日) 19:01:22ID:???
>>581
だから何の実例だよ。主語が分からん。

>>582
必死な野郎は必死にスルーしてください。
0584nobodyさん2007/02/18(日) 19:18:55ID:???
日曜日だな。だが読むべきところは全くない
0585nobodyさん2007/02/18(日) 19:28:21ID:???
くだ質スレではよくある事
0586nobodyさん2007/02/18(日) 20:04:02ID:???
imagettfbboxの結果が
実際に表示される文字列のサイズと
かなり乖離してるのですが
このあたりどうしてますか?
0587nobodyさん2007/02/18(日) 20:15:29ID:???
>>560
エラー画面のカスタマイズはset_error_handler()でできる。
特定ディレクトリは…AliasMatchでどっかのPHPに飛ばして
そこでエラーハンドラ書き換えて再び本来のスクリプトを
includeなりすりゃいいんだろうけど、一筋縄では行かないかもね。

>>569
例えば通常の運用では出ないようなイレギュラーなエラーのために
関数の引数をわざわざ参照にしてそこに戻り値入れさせたり
上位関数に返すために毎回エラーの有無確認したり面倒でしょ?

>>586
他の言語でGD触った時の情報だけど、
戻り値に実際に書き込んだ矩形の位置情報が
配列で返ってきたからそれで調整したよ。

>>581
実例のために早くサンプル用意してね。
0588nobodyさん2007/02/18(日) 20:34:24ID:???
>>前スレ992さんありがとう

ファイル名による条件分岐を前スレで教えて頂いたのですが、
どうしてもうまくいかないものでお知恵を拝借させてください。

top_link.php、und_index.php、sid_read.phpと3つファイルがあるとして
ファイル名の頭3文字による条件分岐をしたい

<?php
$array = array("top_link.php", "und_index.php", "sid_read.php");
foreach($array as $file){
preg_match("/(.*)_.*\.php/", $file, $match);
switch ($match[1]){
case "top":
echo "トップ";
break;
case "und":
echo "アンダー";
break;
default:
echo "その他";
}
}?>

ところが実行するとechoが全て実行されてしまいます。
どうやったらうまくいきますでしょうか?
0589nobodyさん2007/02/18(日) 20:53:11ID:???
>>588
全部指定してforeachで回してるんだからそれぞれは正しく分岐されてるじゃないの。
0590nobodyさん2007/02/18(日) 21:22:45ID:???
>>587
581ではないけど、今コードロックの解析してるからちょっとまっとれ。
05915882007/02/18(日) 22:04:04ID:???
>>589
すいません、あほな書き方してしまいました。
やりたいことは、ファイル名によって表示文字を分岐させたいということです。

$File = basename($_SERVER['SCRIPT_NAME'],".php");

<?php
preg_match('/(.*)_.*\.php/', $File, $match){
switch ($match[1]){
case 'top':
echo 'トップ';
break;
case 'und':
echo 'アンダー';
break;
default:
echo 'その他';
}
}
?>

自分の力ではなかなかうまくいきませんで・・・
05925902007/02/18(日) 22:04:37ID:???
スクリプト内の
A=0 B=1 C=2 .... a=26 b=27 c=28 ... 0=52 1=53 2=54 +=62 /=63 ==64 その他は0
に変換する。

1文字目は上の式の(値-0)/4の商
2文字目は(値-1)/4
3は(値-2)/4
4は(値-3)/4
5文字目は1文字目と同じ6文字目は2文字目と同じ……と変換していく。
変換した値を2進数にして頭に0をつける。
各文字を結合。

ここまで第一段階。
05935902007/02/18(日) 22:07:13ID:???
>>591
$File = basename($_SERVER['SCRIPT_NAME']);

にする
0594nobodyさん2007/02/18(日) 22:13:44ID:???
>>591
それで全てのechoが実行されるの?ほんとかよ
05955902007/02/18(日) 22:30:26ID:???
第一段階でできた文字列を8文字ずつ分割しループ。
分割した値を10進数に変換
暗号化キーから、現在のループ回数%8の値文字目を取り出す。=$bとする
10進数にした値から暗号化キー文字数(strlen)を引くきchr()にかける。 = $aとする

ビット演算子 xor
$text = ord($a) ^ ord($b))
$textを再びchr()にかける。 8文字で分割したやつすべて上の処理して結合

暗号化キーは暗号化されたスクリプトの3行目あたり$codelock_lock変数に格納されてるものをbase64デコードして、
$codelock_unlockで検索すれば書いてある。

疲れたので続きはまた明日。
というか、複雑にするためかif文とかわざわざ文字列で書いてevalとかしてるしかなりめんどい。
このあとgzinflateとかbase64_decodeがものすごいからみあってくる。

簡単に書くと
コード -> 2進数 -> 10進数 -> ビットレベルで変換 -> base64デコード -> (deflate解凍) -> base64_decode -> deflate圧縮 -> deflate圧縮 -> base64_encode
かな。
これが暗号化する方法だから、複合化は逆順で。
まぁ明日まってろ。
0596nobodyさん2007/02/18(日) 22:38:31ID:???
おれは突っ込まないぞ
05975292007/02/18(日) 22:49:40ID:???
訴えられても俺は知らんぞ。
0598nobodyさん2007/02/18(日) 23:00:49ID:???
>>590
オナニー中すまないが通報しますた
0599nobodyさん2007/02/18(日) 23:54:15ID:RrKrWkvD
例外を投げるのにExceptionクラスを直接使わせたくない(使ったときコンパイル自体を防ぎたい)
のですがどうすればいいでしょうか?
0600nobodyさん2007/02/19(月) 00:25:29ID:???
>>597-598
>>590じゃないけど、いったいどこに何を訴えると言うのだww
むしろ簡単にクラックできる暗号化ソフトを有料で売ってる方が訴えられるぞw
0601nobodyさん2007/02/19(月) 00:34:03ID:axdehxdy
すみません、今、メールフォームでアンケートの入力内容を特定のアドレスに
送信するというのを作っています。
で、環境はwinでアパッチ+PHPなんですが、事前の準備としてphp.iniの設定が
良くわかりません。

[mail function]
; For Win32 only.
SMTP =
smtp_port = 25
; For Win32 only.
sendmail_from =

SMTPとsendmail_fromにはなにを入れたら良いんですか?
デフォルトではlocalhostが入っていましたが。。
契約しているプロバイダのsmtpと自分のプロバイダメールアドレスで良いんでしょうか・
試しにやってみたらエラーが出ました。。>SMTP server response: 503 No recipient(s)
よろしければ教えてください。よろしくお願いします。
0602nobodyさん2007/02/19(月) 00:43:06ID:???
テスト用のローカル環境だよな?
その昔radishってフリーソフトをインスコしてやったような希ガス
詳細は忘れた
0603nobodyさん2007/02/19(月) 00:47:20ID:axdehxdy
sendmailっていうのはリナックスに入っているメール送信機能ですよね?
winにはないから、どこかのsmtp設定する必要があるんですよね。
じゃあリナックス入れた方が良いんでしょうか?最終的にはレンタル鯖で
リナックスで操作することになると思うんですが、、
phpの勉強だけならwin環境で良いかと思ってたのですが、色々複合して
やろうとすると結構不便なのかなー
0604nobodyさん2007/02/19(月) 00:51:46ID:???
>>603
ttp://readygo.s8.xrea.com/php/php_ls01.php

>SMTPとsendmail_fromにはなにを入れたら良いんですか?
ならsendmail_from と php.iniでぐぐればいい
0605nobodyさん2007/02/19(月) 01:32:03ID:axdehxdy
>>602>>604
ありがとうございます。
教えてもらったの見て勉強してみます。
0606nobodyさん2007/02/19(月) 02:21:45ID:???
test.php?fileName=abc.swf
などのようにして動的にファイルを読み込んでいて。
受けて側を↓にしてます。
readfile("{root}/files/" . $_GET["fileName"]);

この{root}以下に重要なファイルがあるのですが、
/files/以下だけは、どのファイルを読み込まれてもOKです。

このようなロジックで、/files/以外のディレクトリが
悪意のユーザーによって読み込まれてしまう可能性ってありますか??
0607nobodyさん2007/02/19(月) 02:24:52ID:???
日本語でおk
0608nobodyさん2007/02/19(月) 02:26:50ID:???
>>606
お前はとりあえず一度回線切って首(ry

つーか{root}ってなんだよ? 変数のつもり?
基礎からやり直せ。
0609nobodyさん2007/02/19(月) 02:35:33ID:???
つ相対パス
0610nobodyさん2007/02/19(月) 02:40:44ID:???
>>606
../secret.txt

って入力されたらアウトかな。readfileの実装によるけど試してみる価値はある。
0611nobodyさん2007/02/19(月) 02:47:59ID:???
>>607->>610
すみません。説明が悪くて。

>>610
>../secret.txt
試してみました。で、これは大丈夫でした。404エラーになりました。

ディレクトリまで指定して、ファイル名だけをGETのパラメータにしているので、
大丈夫だと思っていますが、イタズラが結構多いので心配しています。
0612nobodyさん2007/02/19(月) 02:52:04ID:???
心配だったらファイル名正規表現でチェキするとか、
あらかじめファイル名のリスト用意しておくとか
0613nobodyさん2007/02/19(月) 02:53:05ID:???
>>611
いや、パスで指定してるんだから404は関係ない。
URLエンコードしたのでこれで試してみて。
test.php?fileName=%2e%2e%2fsecret%2etxt
0614nobodyさん2007/02/19(月) 02:54:24ID:???
常套手段で普通にアウトなんだけどな。
0615nobodyさん2007/02/19(月) 03:09:46ID:???
>>613
> いや、パスで指定してるんだから404は関係ない。
確かに!!そうですね。

> URLエンコードしたのでこれで試してみて。
> test.php?fileName=%2e%2e%2fsecret%2etxt
ははは、駄目でした。見つかっちゃいました。

>>612
> 心配だったらファイル名正規表現でチェキするとか、
なるほど、そうしたら、.htaccessで↓のように書きました。
RewriteRule ^([a-z0-9]+)\.php\?fileName=([a-z0-9\.]+)$ $1.php?fileName=$2
RewriteRule ^([a-z0-9]+)\.php\?fileName=(.+)$ /404.htm
↑これで、動作的にも上のような問題にも対応できそうですが、
他に問題点などありますか?
0616nobodyさん2007/02/19(月) 03:17:37ID:???
$_GET["fileName"]
を正規表現でチェックしろってことだろ?
".."を含んでる場合はあぶないよな?
あと、ブラックよりホワイトチェックのがよい
0617nobodyさん2007/02/19(月) 03:25:42ID:???
fsockopen()でソケット接続後にbodyだけを抽出したいんですが、
何か良い方法ないでしょうか??

$fp = fsockopen($host, 80, $errno, $errstr, 30);
while(!feof($fp)){ $line .= fgets($fp); }
fclose($fp);


0618nobodyさん2007/02/19(月) 03:26:12ID:???
知識が偏ってる希ガスw
0619nobodyさん2007/02/19(月) 03:35:59ID:???
>>616
> $_GET["fileName"]
> を正規表現でチェックしろってことだろ?
あ、確かに。このパラメータ限定で.も入らないようにチェックします。

> あと、ブラックよりホワイトチェックのがよい
すみません、これで最後ですが、この「ホワイトチェック」ってどういう意味でしょうか?
googleで「ホワイトチェック」でも「ホワイトチェック php」でも「ホワイトチェック プログラム」でも、
検索してみたのですが、ホワイトチェック「柄」のページばかり引っ掛かってしまってみつかりませんでした…
0620nobodyさん2007/02/19(月) 03:42:46ID:???
>>619
http://www.pursue.ne.jp/jouhousyo/sysad/kaihatu/test/test02.html
0621nobodyさん2007/02/19(月) 03:50:08ID:???
>>619
ホワイトリスト
0622nobodyさん2007/02/19(月) 03:55:19ID:???
>>620
普通にそのページは違くね?

<?php
$allowFileList = array('ok.txt', 'ok2.txt', 'ok.swf');//許可するファイルのリスト。(ホワイトリスト)
$fileName = $_GET['fileName'] || array();
if (in_array($fileName, $allowFileList)) {//ここ。
//処理
} else { die('不正なファイル名です。';) }
?>
OKなファイル名に一致してるかチェック。
0623間違えた2007/02/19(月) 03:56:27ID:???
$fileName = $_GET['fileName'] || array();
↓
$fileName = $_GET['fileName'] || '';
0624nobodyさん2007/02/19(月) 04:12:48ID:???
>>620-623
なるほど、確かにその方が安全な実装ですね。
「ホワイトリスト」も初めて聞いた。
色々勉強になりました!ありがとぉ!
0625nobodyさん2007/02/19(月) 04:13:17ID:???
realpath()とdirname()使えば「特定ディレクトリ以下を許可」もできるね
0626nobodyさん2007/02/19(月) 05:29:54ID:???
もう1つ質問
$_GET["filename"]
このGETの値が自分のURLからきたかどうかチェックするにはどうしたらいい?
0627nobodyさん2007/02/19(月) 05:35:18ID:???
>>626
sessionを保持しているかでチェックするのが吉。努々リファラでやること勿れ
06286172007/02/19(月) 07:28:18ID:???
すみません、自己解決しました
0629nobodyさん2007/02/19(月) 08:46:59ID:???
>>624
その前に、もう一度ディレクトリ構成を考え直した方が良いのでは?
0630虚弱PHP2007/02/19(月) 10:08:08ID:???
>>626
基本的にCSRF対策と同じになるから、
CSRFで検索してみるといいと思うよ。
セッション&ワンタイムトークン使えばいい。
0631nobodyさん2007/02/19(月) 11:24:08ID:???
number_formatで小数点表示出来ますが、
小数点が発生する場合は、切り上げではなく切り捨てに
する場合、どういう設定にしたらいいのでしょうか?(6.6でも6にする)
0632nobodyさん2007/02/19(月) 11:33:04ID:???
floor
0633nobodyさん2007/02/19(月) 11:40:12ID:???
>>632
ありがとうございました。
06345882007/02/19(月) 12:17:06ID:???
>>593
あ、すいません。
凡ミスでした。
ただ、やはりうまくいきません

preg_match('/(.*)_.*\.php/', $File, $match){
の行について↓のエラーがでてしまいます
Parse error: parse error, unexpected '{'

>>594
全てのechoが実行されてしまうのは>>588の書き方です。
紛らわしくて吸いません
0635nobodyさん2007/02/19(月) 12:31:05ID:???
preg_matchの返値はboolじゃないの
0636nobodyさん2007/02/19(月) 12:36:53ID:???
>>634
そのエラーメッセージを穴の空くほど見つめてみろ。答えが書いてある。
親切なエラーメッセが出てるのに、なぜ自分でそれを見て考えずに質問丸投げするのだお前は。

>>635
アホ。配列だよ。
0637nobodyさん2007/02/19(月) 12:50:03ID:???
>>636
配列ww
06386162007/02/19(月) 13:04:41ID:???
ブラック、ホワイトチェックってのは俺の造語だったかもだわ
〜リストは一般的だが、概念としてはリストに限らんだろ
ブラック:通してはいけないものをチェックしてクリーンにする
ホワイト:通してよいものをチェックしてクリーンにする
どっちがより安全かはわかるよな
0639nobodyさん2007/02/19(月) 13:10:28ID:kbGuwf2q
書き方について質問です。

■1番目
if($a==1){
echo"正解";
}else{
echo"不正解";
exit;
}
■2番目
if($a!=1){
echo"不正解";
exit;
}
echo"不正解";

やってる内容は同じですが一番目と二番目の書き方でどちらが妥当でしょうか?
0640nobodyさん2007/02/19(月) 13:15:56ID:???
1番目だな。 $a==2だったらとかを加えるときに加えやすい。
俺だったら

result = "不正解";
if($a==1){
  result = "正解";
}
echo result;

だな。途中にどんな条件が加わってもOKだからメンテしやすい。
0641nobodyさん2007/02/19(月) 13:26:50ID:kbGuwf2q
ありがとうございます。メンテしやすさを考えて書いて見ます。
0642nobodyさん2007/02/19(月) 13:47:28ID:???
//代入があまり好きでない
$result = array("不正解","正解");

if( $a==1 ) {
 $result[$a];//正解
} else {
 die($result[$a]);//不正解
 
}
0643nobodyさん2007/02/19(月) 14:01:42ID:???
条件が増える可能性があるならswitchだろ

switch($a){
1:echo '正解';break;
default: echo '不正解';break;
}
exit;
0644nobodyさん2007/02/19(月) 14:07:20ID:???
あくまで追加を考えなければ
echo $a==1 ? "正解":"不正解";
ってのもありじゃない?
0645nobodyさん2007/02/19(月) 14:12:26ID:???
PHP4にてクラスに初めて挑戦してるんですが、
メンバ変数の宣言(var $var;)を行わなくても
特に問題なくスクリプトは動作します。

宣言することにはどういった意味があるんでしょうか。
0646虚弱PHP2007/02/19(月) 14:15:02ID:???
>>645
メンバ変数じゃなくて、ローカル変数になってない??
0647nobodyさん2007/02/19(月) 14:15:46ID:???
       ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい>>636!!
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
■ このスレッドは過去ログ倉庫に格納されています