$_FILE上传大文件时即使upload_max_size比文件大小大仍会出现错误1

36

我有一个简单的上传表格,里面包含:

enctype="multipart/form-data"/>

并且

input type="hidden" name="MAX_FILE_SIZE" value="5900000" />

以下是在php.ini中应用的设置(通过phpini()检查):

upload_max_filesize = 7MB  
memory_limit = 64M  
post_max_size = 8MB  

我尝试上传一个小文件 - 500k,它可以通过。

我尝试上传一个5MB的文件(比upload_max_filesizepost_max_size设置的值都小),但却失败并显示错误代码1:提示如下:

UPLOAD_ERR_INI_SIZE Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.

有人知道是怎么回事吗?

5个回答

64
我认为这是由于打字错误导致的。应该是 "

",而不是 "

".

upload_max_filesize = 7MB

应当这样阅读

upload_max_filesize = 7M

使用phpinfo()再次检查实际应用的值。


3
你说得对,问题解决了。我之前没有意识到的诀窍是:虽然phpinfo()显示了7MB的值,但它并不认为这是适当的。现在一切都好了,爱你哦。 - mgpepe

8
你还需要在“php.ini”中设置post_max_size

5
upload_max_filesize = 7M

这里的值类似于7M10M,而不是MB

再次使用phpinfo()检查实际应用了什么值。

使用以下代码来了解问题所在。如果文件大小是问题,它会简单地将输出打印为超过了php.ini中的upload_max_filesize指令。

<?php
$error_types = array(
    1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.',
    'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.',
    'The uploaded file was only partially uploaded.',
    'No file was uploaded.',
    6 => 'Missing a temporary folder.',
    'Failed to write file to disk.',
    'A PHP extension stopped the file upload.'
);

// Outside a loop...
if ($_FILES['userfile']['error'] == 0) {
    // here userfile is the name
    // i.e(<input type="file" name="*userfile*" size="30" id="userfile">
    echo "no error ";
} else {
    $error_message = $error_types[$_FILES['userfile']['error']];
    echo $error_message;
}
?>

通过这样的方式,我们可以轻松地识别问题。我们还可以使用 switch(){ case } 来打印上述错误信息。


2
只是想提一下关于错误代码和消息的 PHP 文档链接:http://php.net/manual/en/features.file-upload.errors.php - Kenneth

3

我曾经犯过一个严重错误:

如果你想上传非常大的文件,你必须将 KeepAliveTimeout 设置为高于默认值 5 秒。

例如:

KeepAliveTimeout 300

你可以在/etc/apache2/apache2.conf文件中找到这个属性。

0

前往 WHM->服务配置->PHP配置编辑器 并更新 upload_max_filesize 的值。


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