PHP:UPLOAD_ERR_INI_SIZE的作用是什么?

3
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>

所以我的问题是:如果您无法检查它,那么UPLOAD_ERR_INI_SIZE有什么意义?
3个回答

7

UPLOAD_ERR_INI_SIZE 值为 1;上传的文件超过了 php.ini 中 upload_max_filesize 指令的大小限制。

POST_MAX_SIZE 大于 UPLOAD_MAX_FILESIZE 时,这是有道理的。

我在一个 POST_MAX_SIZE128MB 的环境中尝试了一下,然后将 UPLOAD_MAX_FILESIZE 设置为 1MB

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

$_POST 的内容:
Array
(
    [random_field] => 您应该在 $_POST 超级全局变量中看到此字段。
)

$_FILES 的内容:
Array
(
    [upload_test] => Array
        (
            [name] => Scan.tiff
            [type] => 
            [tmp_name] => 
            [error] => 1
            [size] => 0
        )
)

虽然我们无法获得文件的大小,但我们知道它超过了 upload_max_filesize


谢谢。这很有帮助,但如果您使用您描述的环境,然后上传一个256 MB的文件怎么办?您将回到最初的问题。因此,我认为每当您使用PHP处理文件上传时,都必须实现类似于这个的东西。但是您确实回答了我的问题。谢谢! - Nick

1

就像许多事情一样,这个常量可以追溯到 PHP 源代码中的一个常量。特别是在 rfc1867.c 的第 66行

似乎文档上传功能的人只是复制并解释他们在源代码中看到的每个常量。


0

当出现错误 The uploaded file exceeds the upload_max_filesize directive in php.ini. 时,需要进行错误跟踪。

您可以使用 error_get_lasttry .. catch 进行错误跟踪。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接