上传大文件时出现奇怪的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上传大文件时出现奇怪的问题相关的知识,希望对你有一定的参考价值。

我在php中上传大文件时遇到了一个奇怪的问题。

在php.ini中,max_execution_time设置为30,post_max_size设置为32M,upload_max_filesize设置为32M。当我尝试上传大小为40.2 MB的文件时,它不会显示任何错误。 $_FILES变量的值为array(0) { }$_FILES['userfile']的值为NULL

如果文件大小超过php.ini中设置的值,则应返回错误消息

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

但它也没有显示任何错误(因为$_FILES是一个空数组)。我不知道为什么会发生这种情况。

当我更改php.ini并设置post_max_size设置为64M时,upload_max_filesize设置为64M,然后它工作正常。所以,我决定使用以下代码,而不是更改php.ini文件。

ini_set('upload_max_filesize', '64M');
ini_set('post_max_size', '64M');
ini_set('max_execution_time', 300);

我甚至试图增加max_execution_time。不过,我遇到了同样的问题。 ini_set()不在这里工作。

答案

要使40 MB文件因上传错误而失败,您必须增加post_max_size,如果超过该变量的值,则会得到一个空的$ _FILES数组。见the manual

如果发布数据的大小大于post_max_size,则$ _POST和$ _FILES超全局变量为空。

此外,ini_set()在那里不起作用,因为您尝试更改的两个变量是PHP_INI_PERDIR,因此需要在php.ini或.htaccess或httpd.conf中进行更改。您应该尝试使用例如these settings in .htaccess的40MB文件

php_value upload_max_filesize 32M
php_value post_max_size 64M
php_value max_execution_time 300
另一答案

还有一个你可能需要看的设置,Apache的LimitRequestBody

如果文件超过该值,则上传可能会在到达PHP之前被阻止。

Apache Documentation

另一答案

ini_set()在这里不起作用。

除了ini_set()之外,您尝试使用max_execution_time更改的值无法使用ini_set()更改。 在list of php.ini directives中,据报道它们是PHP_INI_PERDIR类型,这意味着(如Where a configuration setting may be set中所解释的)它们可以在php.ini,.htaccess或httpd.conf中进行更改。可以使用ini_set()更改的配置设置是标记为PHP_INI_USER的设置。

另一答案

对于服务器:

在cPanel中搜索php,你会在Software下找到“Select PHP version”。软件 - >选择PHP版本 - >切换到Php选项 - >更改值 - >保存。

对于本地:

在xampp下的php文件夹中找到PHP ini(配置设置)文件。改变post_max_size = 40Mupload_max_filesize = 40M

以上是关于上传大文件时出现奇怪的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 或命令行上传到 BigQuery 时出现奇怪的重复字段错误。所有字段唯一

上传大文件时出现网络错误

Django/React/Firebase - 上传大文件时出现 CORS 错误

提交到 iTunes Connect 时出现奇怪的错误

尝试上传文件时出现异常

将 Excel 工作表导出到 PDF 文件时出现奇怪的 Powershell 行为