PHP不会在不正确的文件上传大小上抛出异常

时间:2011-02-16 00:18:12

标签: php exception file-upload filesize

我有一个带文件上传输入的简单表单。这是处理该表单的代码:

$error = false;

if(isset($_POST["name"], $_POST["desc"], $_POST["aname"], $_FILES["skin"])) {
    try {
        // Validate the form
        if(strlen($_POST["name"]) < 3 || strlen($_POST["name"]) > 24)
            throw new Exception("Skin name needs to be between 3 and 24 characters.");
        if(strlen($_POST["desc"]) < 3 || strlen($_POST["desc"]) > 32)
            throw new Exception("Skin description must be between 3 and 32 characters.");
        if(strlen($_POST["aname"]) < 2 || strlen($_POST["aname"]) > 16)
            throw new Exception("Authors name must be between 2 and 16 characters.");

        // Validate the file upload
        if($_FILES["skin"]["error"] !== UPLOAD_ERR_OK)
            throw new Exception("There was a problem uploading the file. Try again later.");
        if($_FILES["skin"]["size"] > 204800)
            throw new Exception("File size must be 200KB or less.");

    } catch (Exception $e) {
        $error = $e->getMessage();
    }
}

然后我的代码中有了这个:

if($error) {
    echo "<p class=\"error\">Error: <i>$error</i></p>";
}

如果代码中先前抛出异常,则会在表单上方显示错误。除了这一部分,一切都很好:

if($_FILES["skin"]["size"] > 204800)
    throw new Exception("File size must be 200KB or less.");

我要做的是检测上传文件的文件大小是否超过200KB。如果是,我想抛出异常。但是,如果我通过上传表单发送一个20MB的文件,它根本不会捕获它,并且不会抛出异常。

任何人都可以猜到为什么?我已经尝试过几种不同的组合,但出于某种原因,它只是没有检测到它超过200KB的大小。

感谢任何帮助,谢谢。

编辑:没关系,我忘了更改限制POST上传大小的默认php.ini设置。对于遇到此问题的任何人,请进入您的php.ini文件并将此选项更改为post_max_size = 8M以满足您的需求。

1 个答案:

答案 0 :(得分:3)

你似乎空了$ _FILES。如果发布的文件大小超过php.ini中的post_max_size,则可能会发生这种情况。

相关问题