PHP:UPLOAD_ERR_INI_SIZE 有什么意义?

Nic*_*ick 3 php error-handling file-upload

PHP 手册中有一个名为“处理文件上传”的部分。该部分有一个名为“错误消息解释”的小节。该小节描述了一个名为“UPLOAD_ERR_INI_SIZE”的错误:

值:1;上传的文件超出了php.ini中的upload_max_filesize指令。

但是,根据我的经验,不可能使用 UPLOAD_ERR_INI_SIZE 检查此特定错误,因为如果用户上传的文件超出了 php.ini 中的 upload_max_filesize 指令,则 $_FILES 超全局为空。想亲自测试一下吗?将其另存为“upload_test.php”,然后尝试上传一个低于限制的文件,然后上传一个超过限制的文件:

<?php

    if (isset($_GET['submitted']) && $_GET['submitted'] === 'true')
    {
        echo 'Contents of $_POST:<hr><pre>';
        print_r($_POST);
        echo '</pre><hr>Contents of $_FILES:<hr><pre>';
        print_r($_FILES);
        echo '</pre><hr>';
        exit;
    }

    $max_filesize_in_mib = min((int)(ini_get('upload_max_filesize')), (int)(ini_get('post_max_size')), (int)(ini_get('memory_limit')));

?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>PHP Upload Test</title>
    </head>
    <body>
        <h1>Upload a File (Maximum File Size: <?php echo $max_filesize_in_mib; ?> MiB)</h1>
        <form action="upload_test.php?submitted=true" enctype="multipart/form-data" method="post">
            <input type="file" name="upload_test">
            <input type="hidden" name="random_field" value="You should see this field in the $_POST superglobal.">
            <input type="submit" value="Upload">
        </form>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:如果你永远无法检查 UPLOAD_ERR_INI_SIZE 的意义是什么?

小智 7

UPLOAD_ERR_INI_SIZE 值:1;上传的文件超出了 php.ini 中的 upload_max_filesize 指令。

POST_MAX_SIZE当您的值大于时,这是有意义的UPLOAD_MAX_FILESIZE

POST_MAX_SIZE我在is的环境中尝试过128MB,然后我设置UPLOAD_MAX_FILESIZE1MB

这是我得到的(如预期):

$_POST 的内容:
大批
(
    [random_field] => 您应该在 $_POST 超全局中看到该字段。
)

$_FILES 的内容:
大批
(
    [upload_test] => 数组
        (
            [名称] => Scan.tiff
            [类型] =>
            [tmp_name] =>
            [错误] => 1
            [大小] => 0
        )
)

虽然我们没有得到文件的大小,但我们确实知道它超出了upload_max_filesize.