1324800773 PHPで複数ファイルをアップロードする方法


処理の流れは「jpegファイルがあればアプロードし配列に代入。」これをファイルがあるかぎり続ける。jpegファイルでなければ、エラーメッセージを表示する。

アップロードした画像は一覧表示できるようにコードも書きました。

しかし、画像ファイルをアプロードしていないにも関わらずブラウザ上に白い四角が表示されて困っています。
ソースでは、
「<img src="" width="100" height="100" alt="" />」と
表示されています。

どなたかこの問題を解消する方法を教えてください。
それと、みなさんでしたらどのようなコードを書くのでしょうか?
よろしくお願いします。

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2011/12/25 17:09:25
  • 終了:2012/01/01 17:10:03

回答(0件)

回答はまだありません

  • id:windofjuly
    うぃんど 2011/12/26 15:55:14
    問題点は色々ありますね

    (1)preg_match
    そのままでは aaaa.jpg.vbs などもOKと見なしてしまう
    もうひとつの質問への回答を使ったのでしょうけど、
    思慮不足な回答なので、回答者に再度問いただしましょう

    (2)if(count($errors) === 0 ) {
    画像アップロードの有無についてチェックされてませんので、
    画像の有無にかかわらず$file以下が実行されてしまうのが今回の原因
    画像ファイルがあるかどうかをチェックするようにしましょう

    (3)ファイル名だけでは非常に危険
    画像ファイル名を付けたウィルスなども存在しますので、
    ファイル名だけでの判断はそもそも危険・・・
    アップロードされたファイルが画像であるかどうかをチェックする方法を学びましょう


    コードを画像で貼り付けられると、面倒なだけでなく、
    回答者が手入力するときにミスする可能性もあり、話がややこしくなります
    それだけではなく、今回の件はセキュリティの問題もあって、
    どこまで話をすればいいのか判らないので、とりあえずコメントだけです
  • id:kyouryukun
    ①についてなんですが、いろいろな方法がありますよね。
    わたしは、

    例①
    $temp = explode('.', 'aaaa.jpg.vbs');
    $extension = array_pop($temp);
    echo $extension;

    例②
    $extension = pathinfo('aaaa.jpg.vbs', PATHINFO_EXTENSION);
    echo $extension;

    で拡張子のチェックをおこなうことにしました。
    これだと「aaaa.jpg.vbs」はNGとみなせます。
    けどファイル名が「英数字」であることはチェックできませんから、それは別に書かないといけませんね。
  • id:windofjuly
    うぃんど 2011/12/27 07:55:26
    あちらの質問はすでに終了してしまったのですか・・・
    彼らが正規表現を理解していないことだけは確認できましたね

    さて、
    先頭にマッチする ^ だけでなく、
    末尾にマッチする $ というものもあり、
    $を使えば$extension=などという式も、
    その後の判別処理も不要になりますので、
    学習してみてくださいな

    では、これにて失礼
  • id:kyouryukun
    ファイル名は英数字のみか?
    拡張子はjpegなのか?
    という2つのチェックを「1つの正規表現」で表すことができるんですね?
    考えてみます!

  • id:kyouryukun
    回答者の方に教えてもらいました。
    preg_match("/(^[a-zA-Z0-9_-]+.+)\.(jpe?g)$/i", $file_name)
    で「aaaa.jpg.vbs」をOKとみなしませんでした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません