• 締切済み

PHP 正規表現 スラッシュの扱いについて

PHPでファイルをアップロードするプログラムを作っています。 誤ってCGIなどのプログラムをアップしない為に、 拡張子を判断してそれを防ぐ為の構造を考えています。 そこで条件部を、 if(!preg_match("/^image\/.*(png|jpeg|gif)$/i", $_FILES["file"]["type"]) || !preg_match("/^text/html\/.*(txt|html)$/i", $_FILES["file"]["type"])){ エラーメッセージ } としたのですが、上手く動いてくれません。 恐らく「text/html」の表記に問題があるのだと思うのですが… 解決方法、教えてください。よろしくお願いします。

みんなの回答

  • php504
  • ベストアンサー率42% (926/2160)
回答No.6

CGIファイルも普通のテキストファイルなのでtypeではなくファイル名の拡張子で制限した方がいいでしょう

-TaKaHiRo-
質問者

お礼

アドバイス、ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

もしそのエラーなら preg_match("/^text/html\/.*(txt|html)$/i",・・・) ではなくて preg_match("/^text\/.*(txt|html)$/i",・・・) じゃないでしょうか?

-TaKaHiRo-
質問者

お礼

アドバイス、ありがとうございました。 if文を二つに分けることで、問題を回避しました。 if(!preg_match("/^image\/.*(png|jpeg|gif)$/i", $_FILES["file"]["type"])){ if(!preg_match("/^text/html\/.*(txt|html)$/i", $_FILES["file"]["type"])){

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

error($_FILES["file"]["type"]."の形式は不正です。"); などして内容を表示してみては? 単純にマッチしてないだけのような気がしますが・・・

-TaKaHiRo-
質問者

補足

error($_FILES["file"]["type"]."ファイル形式が不正です。"); の結果は、 text/htmlファイル形式が不正です。 となりました。 見た目、問題ないと思うのですが・・・ 「見えない文字」があるんでしょうか?

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

> error("ファイル形式が不正です。"); Webサーバのログを見ることができるのでしたら、 当該アクセス時のログの内容を見せていただけますか?

-TaKaHiRo-
質問者

お礼

アドバイス、ありがとうございました。 残念ながら、今回のログを参照することができませんでした。 (多忙で確認できませんでした。)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

とりあえず text/html ↓ text\/html してみては?

-TaKaHiRo-
質問者

補足

if(!preg_match("/^text\/html\/.*(txt|html)$/i", $_FILES["file"]["type"])){  error("ファイル形式が不正です。"); } これで試してみましたが、できませんでした。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

> 上手く動いてくれません。 どんな風に、でしょうか? エラーメッセージが出たのでしたら、全文を載せてください。

-TaKaHiRo-
質問者

補足

「エラーメッセージ」とは、 error("ファイル形式が不正です。"); を略しただけです。 ですので、画面には「ファイル形式が不正です」というメッセージが表示されます。 htmlファイルをアップロードした場合でも、 期待に反して、このエラーメッセージが出てしまうのです。

関連するQ&A