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_FILESIZE
为1MB
这是我得到的(如预期):
$_POST 的内容: 大批 ( [random_field] => 您应该在 $_POST 超全局中看到该字段。 ) $_FILES 的内容: 大批 ( [upload_test] => 数组 ( [名称] => Scan.tiff [类型] => [tmp_name] => [错误] => 1 [大小] => 0 ) )
虽然我们没有得到文件的大小,但我们确实知道它超出了upload_max_filesize
.