0

アップロードした画像サイズが3MBを超えた場合にエラーメッセージを出したい。これが私の現在のコードです。画像が3MBを超えるとちゃんとエラーメッセージが出ますが、画像がアップロードされていない場合もエラーメッセージが出ます。これを修正するにはどうすればよいですか?

//image check start
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 3072000))
//image check end
{
    if($_FILES['file']['size'] > 0)
    {
        file uploading script
    } else {
        do nothing
    }
} else {
    error("Maximum image size exceeded or invalid file format.");
}
4

3 に答える 3

1

ファイルがアップロードされていない場合の条件を考慮すると、型チェックのいずれも true を返さないため失敗することがわかります。そのため、最後の else の後にエラー行に到達します。

次のようなものが必要です。

if ( $_FILES['file']['size'] == 0 ) 
{
    // do nothing
} else {
    //image check start
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/png")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 3072000))
    //image check end
    {
        file uploading script
    } else {
        error("Maximum image size exceeded or invalid file format.");
    }
}

明らかに、ファイルがアップロードされていない場合に本当に何もする必要がない場合は、次のようにします。

if ( $_FILES['file']['size'] != 0 ) 
{
    //image check start
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/png")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 3072000))
    //image check end
    {
        file uploading script
    } else {
        error("Maximum image size exceeded or invalid file format.");
    }
}
于 2012-06-12T01:58:57.087 に答える
1

まず、デバッグ中は常にスクリプトでエラー レポートを有効にする必要があります。あなたはこれを行うことができます

error_reporting(E_ALL);
ini_set("display_errors", 1);

エラーがどこから来ているのかわからない場合は、いつでも試してみてprint_r($_FILES);、上記のロジックをたどることができます。ファイル アップロード エラー$_FILES['file']['error']の変数を確認します。アップロードが成功した場合、値は になります。0

if ($_FILES["file"]["error"] !== 0) {
    if ($_FILES["file"]["size"]) > 0) {
        if ((($_FILES["file"]["type"] == "image/gif")
        || ($_FILES["file"]["type"] == "image/jpeg")
        || ($_FILES["file"]["type"] == "image/png")
        || ($_FILES["file"]["type"] == "image/pjpeg"))
        && ($_FILES["file"]["size"] < 3072000))
        //image check end
        {
            if($_FILES['file']['size'] > 0) {
                // file uploading script
            } 
            else {
                // do nothing
            }
        }
        else {
            error("Maximum image size exceeded or invalid file format.");
        }
    }
    else {
        error("Error uploading file. File has size of 0 bytes");
    }
}
else {
    error("There was an error uploading the file.
        File upload returned error code: " . $_FILES["file"]["error"]
    );
}
于 2012-06-12T02:04:54.940 に答える
0

問題は

upload_max_filesize = 3M 

私のphp.iniファイルにあります。に変更したとき

upload_max_filesize = 4M 

すべてがうまくいきました。

ありがとう。

于 2012-06-20T07:51:53.720 に答える