2

ユーザーがフォームを使用してプロフィール画像をアップロードできる編集ページがありますが、問題は、画像の種類が受け入れられている形式の 1 つである場合でも、受け入れられない形式を取得し続けることです。

これがコードです

if(isset($_POST['parse_var']) == "pic")
    {
        if(!$_FILES['fileField']['tmp_name'])
        {
            $errorMSG = '<font color= "#FF0000">Please browse for an Image  Before you press the button.</font>';
        }
        else
        {
            $maxfilesize = 51200;//in bytes =  50kb
            if($_FILES['fileField']['size']>$maxfilesize)
            {
                $errorMSG = '<font color="#FF0000">Your image was too large, please try again.</font>';
                unlink($_FILES['fileField']['tmp_name']);
            }
            elseif(!preg_match("^.(gif|jpg|png)$/i^",$_FILES['fileField']['name']))
            {
                $errorMSG = '<font color="#FF0000">Your Image was not one of the accepted format, please try again</font>';
                unlink($_FILES['fileField']['tmp_name']);
            }
            else
            {
                $newname = "image01.jpg";
                $place_file = move_uploaded_file($_FILES['fileField']['tmp_name'],"members/$id/".$newname);
                $message='<font color="#00FF00>Your Image has been upload successfully</font>';
            }
        }//end else

    }//end if
4

1 に答える 1

4

主な問題:

a)

        elseif(!preg_match("^.(gif|jpg|png)$/i^",$_FILES['fileField']['name']))
                            ^---

パターン区切り文字として正規表現メタ文字を使用しないでください。試す

preg_match('/\.(gif|jpg|png)$/i', ...) instead.

しかし、全体像を見ると、ファイル名をまったく一致させるべきではありません。ファイル名は偽造される可能性があります。代わりに、サーバー側の MIME タイプの決定 (例: 経由file_info()) を行う必要があります。

b)

アップロードの成功を適切にチェックしていません。['tmp_name']$_FILES 配列に a が存在しても、何も意味しません。失敗したアップロードでも tmp_name が生成される可能性がありますが、最終的にはゴミになります。常に次のようなものを使用します。

if ($_FILES['fileField']['error'] !== UPLOAD_ERR_OK) {
   die("Upload failed with error code " . $_FILES['fileField']['error']);
}

エラーコードはここで定義されています: http://php.net/manual/en/features.file-upload.errors.php

c) (マイナー)

一時ファイルのリンクを解除する必要はありません。スクリプトが終了すると、PHP はこれを自動的に行います。

d) (文体的に大きな誤り)

フォントタグ?2013年に?1990 年代は HTML 1.0 の復活を求めて...

于 2013-05-08T19:24:56.570 に答える