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

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

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

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
http://pc11.2ch.net/test/read.cgi/php/1233479457/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

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

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

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0619nobodyさん2009/02/28(土) 12:17:57ID:???
>>616
あれ、一時ファイルってファイル名変わっちゃうんだっけ?これでどう?

} elseif( substr( $_FILES['fl']['tmp_name'][$i], strlen($_FILES['fl']['tmp_name'][$i])-4, 4 ) != ".txt" ) {

} elseif( substr( $_FILES['fl']['name'][$i], strlen($_FILES['fl']['name'][$i])-4, 4 ) != ".txt" ) {

.htmlがアップできないのはおまえさんの仕様だぞ
0620nobodyさん2009/02/28(土) 12:18:10ID:???
>>616
少しは自分で理解しようとしろよ
0621nobodyさん2009/02/28(土) 12:27:20ID:tCRdHOmU
>>619
ありがとうございました。バッチリでした!
0622nobodyさん2009/02/28(土) 13:06:03ID:B+Uhif0K
セキュリティに関してですが
利用者が入力するところはなし、強いて言えばリンクが○○.php?a=○&b=○の形なのでそこをいじることはできますが、
値は1桁の数字のみ通るようにしてかつそれを直接クエリに使うわけではなくswichでWHERE句用の値を選ぶようにしています。
検索もなし、セッションやクッキーは使いません。
DBはSQLiteなので.htaccessで見えないように。
エラー表示も.htaccessでphp_flag display_errors Offに。
こんな感じにしたとして、鯖自体がハッキングされたとかはのぞいてphp(html)やDBの改竄は行われる可能性はありますか?
0623nobodyさん2009/02/28(土) 13:25:32ID:iUikJcgx
教えてください。ソケットをあけて、いま届いているデータをすべて受信するにはどうすれば良いのでしょうか。
$buf=socket_read($out,2048);
で読むことはできるのですが、データが2048byteに足りていないとここで処理がブロックされてしまい、
データが2048byteの倍数でないと必ず最後でとまってしまいます。
長さを1にすれば数万回の無限ループみたいになって処理が遅いし、
長さはともかくいま届いているデータを全て読む、ブロックしない読み込み方法が見当たらなかったです。

socket_recvというメソッドもあるみたいですが、ドキュメントもまだないし
これがない時代も当然できていたはずのことなので、きっとreadで何とかする方法があるんだと思いますが…。
0624nobodyさん2009/02/28(土) 13:35:50ID:???
>622
悪魔の質問だな。
脆弱性の存在を示す事は可能だが、脆弱性が存在しない事を証明するのは至難の業。
セキュリティ対策の多くが「入力時点で全ての値を検証」「出力時点で全てエスケープ」のようにシステマチックなのはその辺に理由がある。

書かれている部分は安全に思える。ツボも押さえているし、他の部分で変な事をしない限り問題ないだろう。
強いて言うなら「入力する場所はなし」という言い方が若干不安かな。
hiddenだろうがなんだろうが全ての値は自由に改竄される、という前提でコーディングする必要がある。
0625nobodyさん2009/02/28(土) 13:47:32ID:Ho2Fi0s+
マジな質問なんですが自宅サーバーでPHP動かしてます。
今まではサーバーとルータだけでやっていたのですが今回ハブを使いPCをもう一台LAN内に追加しました。
そしたら自分のサイトの表示が極めて遅くなり
ページを切り替える毎に3秒位かかります。
LAN内だけかと思いネットカフェで試しましたがやっぱり遅かったのです。

ちなみにサーバーからLANケーブルを抜くと今まで通り高速で表示されます。
そのため初めはLANの設定の問題だと思ったのですが
同じサーバー内のPHPを使ったページでも速いページと遅いページがある事に気がつきました。
しかし遅いページがなぜこれ程遅いのかが色々いじってみたのですが分かりません。
おそらくPHPの使用関数なんかの問題だと思うのですが。
何で?知ってるやつ教えてや。
逆引きとかはしてないです。
0626nobodyさん2009/02/28(土) 14:06:43ID:???
PHP関係ねーし
0627nobodyさん2009/02/28(土) 14:09:33ID:B+Uhif0K
>>624
ありがとうございます。
>強いて言うなら「入力する場所はなし」という言い方が若干不安かな。
付け加えるとjavascriptも使わないのでプルダウンで選択とかもありません。
ほんとにリンクをクリックしていくぐらいです。
ただまあ思い当たるところは列挙しましたが洩れもあるかもしれませんし、
どちらにしろhtmlspecialchars他一応の処理はしています。
完全にとはいえないが大まかに改竄の入り口は認識できてるとみていいもんでしょうか。
0628nobodyさん2009/02/28(土) 14:27:23ID:???
>>622
数値1桁をチェックならまったく問題ない。エスケープ処理もいらない
0629nobodyさん2009/02/28(土) 14:46:51ID:AWhVh/M4
>>614,>>618
ありがとうございます
getimagesizeでは不十分と認識しておりますので他にチェックする方法をご存知でしたらご教示おねがいします
06306132009/02/28(土) 14:47:33ID:8fTqh/0P
書き込み毎にIDが変わってしまうのですいません
0631nobodyさん2009/02/28(土) 15:04:01ID:???
>>629
いや、getimagesizeでいいんだよ
それに加えて、画像の保存先ではスクリプトの実行ができないようにすればおk
0632nobodyさん2009/02/28(土) 15:29:50ID:???
>>623
無限ループしてるならsocket_read()の終了条件を間違えてないか疑うな
晒してみ
0633nobodyさん2009/02/28(土) 15:39:05ID:???
>>631
getimagesizeは信用できるものじゃない
無知お疲れ
0634nobodyさん2009/02/28(土) 16:05:48ID:???
>>627
哲学的な言い方をすると、
不安に思うようなら、脆弱性はあるかもしれないね。
他人に保証を求めるとしたら、それもまた脆弱性のひとつかもしれん。
セッションでもクッキーでも環境変数でも、それぞれがどんな形で渡ってくるか、
そして渡しているか、ブラウザの挙動はどうか、そういう理解度を深めていくしかないんじゃないか?
0635nobodyさん2009/02/28(土) 16:06:47ID:???
>>633
何が信用できないの?
0636nobodyさん2009/02/28(土) 16:08:12ID:???
>>633
ヘッダの一部しか見てない。jk
0637nobodyさん2009/02/28(土) 17:01:27ID:???
まあ、実行権限を剥奪しておけば、考えられる最大の被害は「画像が表示されない」程度なわけだし、getimagesizeで問題ないだろ。
0638nobodyさん2009/02/28(土) 17:05:42ID:???
>>637
きょうび、CMSのコミッターですらその程度の認識をしてたりするから困るよな。
実行権限をはく奪って、もともとPHPは読み込み権限で動くわけだし。
画像ファイルにスクリプトインジェクションされるってのをケアしないんだろうし。
06396252009/02/28(土) 17:18:45ID:Ho2Fi0s+
>>626
いや、最初はそう思ったのですがどうやらPHPの関数により速度が遅くなってるようなんです。
というのもPHPの関数が少ないページは高速に表示するからです。

ただ、何の関数が遅い原因なのかが割り出せません。
何なのか分かる奴よろしく。
0640nobodyさん2009/02/28(土) 17:19:10ID:???
>>635-636百回読んでから回答しろ
ttp://websec-memo.blogspot.com/2007/06/php-getimagesizephp.html
0641nobodyさん2009/02/28(土) 18:04:55ID:???
>639
つ xdebug.profiler_enable = 1
あと、Windows機があるならWinCacheGrid
0642nobodyさん2009/02/28(土) 18:05:36ID:???
Grindだった
0643nobodyさん2009/02/28(土) 19:42:43ID:Lzy3hD4E
imagecreate使って画像生成したんだけれど
画像のファイルサイズが0kb になって 保存できない・・・orz

ファイル名指定
header("Content-Disposition: attachement; filename=foo.jpg");
をつけても0kb・・・

どうしたらいいんだぁ・・・
0644nobodyさん2009/02/28(土) 20:27:57ID:???
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい>>635-636
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
0645nobodyさん2009/02/28(土) 22:16:18ID:???
>>644
どうみても、636は正しいと思うんだが
0646nobodyさん2009/02/28(土) 22:32:57ID:???
ヘッダの一部しか見てないって、それ以外にヘッダで判別できるところあんの?
拡張子は別にして
0647nobodyさん2009/02/28(土) 22:35:26ID:???
ヘッダーの一部しか見てないのは事実だ。
そこから、
> それ以外にヘッダで判別できるところあんの?
っていう展開が意味不明
0648nobodyさん2009/02/28(土) 22:48:34ID:???
>>647
つまり、「ヘッダの、一部しか見てない」なのか「ヘッダの一部しか、見てない」なのかってことね
0649nobodyさん2009/02/28(土) 22:49:44ID:???
何をいってるんだw
0650nobodyさん2009/02/28(土) 22:54:24ID:???
ごめん>>638は分かりにくかったわ
ヘッダの一部しか見てない って、他にも判別できる部分があるようにとれない?

ヘッダの(他にも判別するところはあるけど)一部しか見てない なのか
ヘッダの一部(で)しか見てない なのかってことね
0651nobodyさん2009/02/28(土) 22:57:46ID:???
>>650もなんか分かりにくいわ
寝てくる
0652nobodyさん2009/02/28(土) 22:58:56ID:???
>>650-651
だいたい、そのポイント先、>>638じゃなくて>>648だろ
0653nobodyさん2009/03/01(日) 00:14:40ID:???
とりあえずgetimagesizeは完ぺきじゃないってこと
>>640をよく読め
0654nobodyさん2009/03/01(日) 00:31:01ID:???
>このような攻撃は、アップロードするファイルのファイル名をそのまま(この例では、.php)にしているサイトでのみ有効となるのだが、そのようなサイトは実際多く存在する。

これで回避できるとも読めるわけだが、どうなんだろう。
0655nobodyさん2009/03/01(日) 00:31:30ID:???
635と636は自分でバイナリエディタでも開いて画像にスクリプト埋め込んでこい
0656nobodyさん2009/03/01(日) 00:32:37ID:???
>>654
日本語でおk
0657nobodyさん2009/03/01(日) 00:36:08ID:???
>>655
ここの連中じゃ画像に埋め込むこともできなそうだなw
0658nobodyさん2009/03/01(日) 01:09:42ID:???
そもそもファイルを区別する必要性がわからねえ
最終的にブラウザで表示できるんだから何でもいいだろ
0659nobodyさん2009/03/01(日) 01:18:56ID:???
画像に埋め込んだスクリプトが反応するような糞ブラウザはIEぐらいだろ
0660nobodyさん2009/03/01(日) 02:35:03ID:eUPI6W90
mb_splitで正規表現にデミリタいらないのってバグですか?
0661nobodyさん2009/03/01(日) 03:05:47ID:ircjQ+OX
パーミッションの問題なんだけど、
txtファイルや、htmlファイルは、
ユーザーにrを渡さないと
ブラウザで閲覧したときに見れないんだけど、
.phpファイルは、なぜか
ユーザーに渡す権限が0でも
ブラウザでアクセスしたときに、
動作してしまうんだけど、これってなんで?
0662nobodyさん2009/03/01(日) 03:43:41ID:???
>>661
module版かcgi版かで若干答えが変わるかなぁ。。

ユーザって誰のこと??
0663nobodyさん2009/03/01(日) 03:47:49ID:ircjQ+OX
>>662
オーナー | グループ | 末端ユーザー

こういう概念です
0664nobodyさん2009/03/01(日) 03:50:25ID:ircjQ+OX
>>662
「CGIに関しては純粋にSuExecでの動作」

「CGI版をラッパーを使用し所有者の権限にて動作させる」

と書いてあります。
0665nobodyさん2009/03/01(日) 04:31:12ID:???
>>664
答えが書いてあるよ〜。

Webサーバの一番基本的な動きは分かってるかな?

ブラウザが「このファイルくれ!」ってWebサーバにいうと
Webサーバは自分の中から探して、読みこんで、「処理して」、結果をブラウザに返す。
このときWebサーバもユーザとして動いてる。

こんだけ。
0666nobodyさん2009/03/01(日) 06:55:07ID:ircjQ+OX
pear::authのサンプルコードで、
MySQLの例ばっかりなのだが、
これってSQLiteでもできるんだよね?

コードはどう書けばいいのかな?
特にDSNのあたり。
http://oshiete1.goo.ne.jp/qa3008843.html
このサンプルで、DSNをSQLiteに変更したものを
書いてもらえますか?
0667nobodyさん2009/03/01(日) 06:59:03ID:ircjQ+OX
それから認証の実装で
pear::authを使うことの是非についても
意見を述べてもらえますか?

pearのページ見たら、認証のカテゴリだけで7つも
モジュールあるじゃないですか。
0668nobodyさん2009/03/01(日) 07:01:29ID:???
>>666
ぐぐればすぐ見つかるよ〜
0669nobodyさん2009/03/01(日) 11:45:18ID:???
どうやら
質問

の人な気がするぜ
0670nobodyさん2009/03/01(日) 13:13:02ID:???
そんなの見りゃわかるよ
0671nobodyさん2009/03/01(日) 13:42:43ID:???
------------ここまで自演でした
0672nobodyさん2009/03/01(日) 14:46:48ID:lFCp+aHu
PHPの書き方で<?=$msg?>のような書き方が可能/不可能に設定できる項目教えてください
(ググろうにも「<?=?>」のようなワードでは検索できなくて・・・)
0673nobodyさん2009/03/01(日) 14:50:54ID:lFCp+aHu
short_open_tagでした、事故解決しました
0674nobodyさん2009/03/01(日) 17:35:53ID:Jolk/1HK
phpを使いテキストの各行にある文字列(例えばここでは"hogehoge")
が含まれているかどうかを調べるにはどのようにするのがよいのでしょうか?
0675nobodyさん2009/03/01(日) 17:41:35ID:???
file
foreach
preg_match
0676nobodyさん2009/03/01(日) 17:43:35ID:???
hogehogeがあるかどうかだけならpreg_matchはおおげさだな
strstrあたりでいいと思う
0677nobodyさん2009/03/01(日) 17:43:53ID:???
preg_matchがあればわざわざfileとforeachを組み合さなくてもできます
0678nobodyさん2009/03/01(日) 17:46:03ID:Jolk/1HK
どっちなんだろう・・・
0679nobodyさん2009/03/01(日) 17:50:35ID:???
>>678
史ね
少しは与えられた材料で自分で考えろ
0680nobodyさん2009/03/01(日) 17:51:32ID:???
文字列探索といったら正規表現しか知らない奴って何なの?バカなの?
0681nobodyさん2009/03/01(日) 18:02:38ID:qwqgUI7e
>>677の言ってることはパターン修飾子か?

$list = file("hoge.txt");
for ($i = 0; $i < count($list); $i++) {
if (strpos($list[$i]), "hogehoge") {
echo $i . "行目にhogehogeが見つかりました<br>\n";
}
}

これと同じことをできるのなら俺もぜひ教えてもらいたい
06826812009/03/01(日) 18:04:25ID:???
あ、ごめん
$i行目じゃなくて$i+1か
0683nobodyさん2009/03/01(日) 18:20:01ID:???
if (strpos($list[$i]), "hogehoge") {
なんじゃこりゃ?
0684nobodyさん2009/03/01(日) 18:33:38ID:???
>>681
おれが言ってるpreg_matchがでてこないんだがアンカーミスかね
06856812009/03/01(日) 18:38:49ID:???
$list = file("hoge.txt");
for ($i = 0; $i < count($list); $i++) {
if (preg_match("/hogehoge/", $list[$i])) {
echo $i+1 . "行目にhogehogeが見つかりました<br>\n";
}
}

それじゃこれで
0686nobodyさん2009/03/01(日) 18:41:12ID:???
>>685
動作には問題ないけど
for内にcount($list)を入れると、ループ毎にcountが実行されるので、
$cnt = count($list);

$i < $cnt

みたいにするといいよー
0687nobodyさん2009/03/01(日) 19:29:13ID:???
>>685
preg_matchじゃだめだった
無駄にfileとforeachしなくてもpreg_match_all使えば一行で住む
0688nobodyさん2009/03/01(日) 19:42:54ID:???
何行目に現れるかもわかる?
0689nobodyさん2009/03/01(日) 20:20:12ID:???
わかる
0690nobodyさん2009/03/01(日) 22:47:16ID:Jolk/1HK
perlあがりでどうもphpはよく分からんのだが
datファイル(数字10桁)かどうかを調べるにはどうすりゃいいの?
これだとダメポ。

$datfile = 1234567890.dat;
$number = str_replace(".dat", "", $datfile);
if ($number != \d{10}){
 print "2chのdatじゃない";
} else {
 print "おk";
}
0691nobodyさん2009/03/01(日) 22:52:53ID:???
preg_match
0692nobodyさん2009/03/01(日) 22:54:09ID:???
>>690
$datfile = "1234567890.dat";
if (preg_match("/^\d{10}\.dat$/", $datfile)) echo "おk";
else "2chのdatじゃない";
0693nobodyさん2009/03/01(日) 22:59:06ID:Jolk/1HK
print Thx
0694nobodyさん2009/03/01(日) 23:04:31ID:???
正規表現(笑)
0695nobodyさん2009/03/01(日) 23:16:30ID:A3j42u8W
まとめてファイルをアップロードする仕組みを作りたいのですが、
PHPにZIPを解凍する関数ってあるのでしょうか?

やっぱり、フォームのfile要素をいくつも用意して
1つずつ選択して送信する方法しかないのでしょうか?
0696nobodyさん2009/03/01(日) 23:21:54ID:???
peclとかpearとか探せば色々あるよ
zipだけでもArchiveTarとかArchiveZipとかpecl zipとか色々
0697nobodyさん2009/03/01(日) 23:26:26ID:???
標準クラスであるだろうが
0698nobodyさん2009/03/01(日) 23:27:29ID:???
ArchiveTarは違ったわ
0699nobodyさん2009/03/01(日) 23:29:07ID:???
>>697
それってzip関数のことでしょ?
それはpecl
0700nobodyさん2009/03/01(日) 23:38:13ID:???
標準であるじゃん
暗号化ZIPには対応してないようだけど
0701nobodyさん2009/03/01(日) 23:40:37ID:???
そうだっけ?すまん
0702nobodyさん2009/03/01(日) 23:50:07ID:???
ID:Jolk/1HK
回答もらったらお礼ぐらい書けよksg
0703nobodyさん2009/03/02(月) 00:02:07ID:???
>>693にあるやん
0704nobodyさん2009/03/02(月) 00:07:04ID:???
ID:Jolk/1HK=>>703
07057032009/03/02(月) 00:14:22ID:???
>>704
いんや、>>692なんだけどね
別にお礼を期待して回答しているわけではないから、そんなのはどうだっていいよ
0706nobodyさん2009/03/02(月) 00:56:54ID:???
どうだっていいなら何で書くの?
0707nobodyさん2009/03/02(月) 06:17:58ID:???
アマゾンの文章を取ってきて、
一部の文を変更するプロキシみたいなの
作りたいんだけど、できる?

「この商品を買った人はこんな商品も買っています」

              ↓これを

「この商品を買ってしまったかわいそうな人はこんな商品も買っています」

みたいに変更して表示したいんだけど。

チラ見だと気がつかないって言う。
よーく見ると違いがわかるっていう。
0708nobodyさん2009/03/02(月) 06:18:54ID:???
>>1
0709nobodyさん2009/03/02(月) 06:36:54ID:xA87Qrbu
指定したディレクトリ内から、
指定したMD5(またはSHA-1)の値を持つファイルを取得したいのですが、
なにかよい方法はないでしょうか?

やはり、一度全部取得して、
ひとつひとつ確認する必要があるのでしょうか?

よろしくお願いします。
0710nobodyさん2009/03/02(月) 08:01:04ID:Kxwrby6q
$files = scandir("./doc");
$i = 2;
while($files[$i] != null ):
$files_end = $i;
$i++;
endwhile;

と、docフォルダに入っているファイル数をしらべるスクリプトですが、
while($files[$i] != null ):
の行で
Notice: Undefined offset: 5
と、Noticeが出て来ます。
この、Noticeを消すにはどうしたらいいでしょうか?
0711nobodyさん2009/03/02(月) 08:04:40ID:???
>>707
フィッシング詐欺はやめな
0712nobodyさん2009/03/02(月) 08:05:07ID:???
classの使いどころがさっぱりわからん
使えたらかっこいいんだろうなと思って
使いたい使いたいと思ってるけど結局使わないまま終わってしまう
0713nobodyさん2009/03/02(月) 08:08:31ID:???
>>712
すごい、カンタンなところからはじめれば?
0714nobodyさん2009/03/02(月) 08:10:21ID:???
>>712
変数名をclassにすればいいよ。
$class1 $class2 $class3
0715nobodyさん2009/03/02(月) 10:10:58ID:???
>>710
OUT => while($files[$i] != null ):

IN => while( isset($files[$i]) ):
0716nobodyさん2009/03/02(月) 10:18:29ID:???
>>712
無理して使わなくていいよ
所詮プログラミング手法の1つに過ぎない
世の中には全てオブジェクトにしないと扱うことができない
言語も存在するがPHPはそうではない
使いどころを意識してるうちは概念も理解できないはずだ
オブジェクト指向が何かとかは考えないで
まずはオブジェクトにしないとプログラムが動かないと思ってはじめてみるといい
0717nobodyさん2009/03/02(月) 12:30:23ID:???
クラスを使う利点を教えてください
0718nobodyさん2009/03/02(月) 12:39:55ID:???
人数が多い場合クラス分けしないと学年がばらばらごちゃごちゃになるじゃん
■ このスレッドは過去ログ倉庫に格納されています