我在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并将set_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()
无法在这里工作。
答案 0 :(得分:20)
要使40 MB文件因上传错误而失败,您必须增加post_max_size,如果超过该变量的值,则会得到一个空的$ _FILES数组。见the manual
如果发布数据的大小更大 比post_max_size,$ _POST和 $ _FILES superglobals是空的。
此外,ini_set()在那里不起作用,因为您尝试更改的两个变量是PHP_INI_PERDIR,因此需要在php.ini或.htaccess或httpd.conf中进行更改。您应该尝试使用40MB文件,例如these settings in .htaccess
php_value upload_max_filesize 32M
php_value post_max_size 64M
php_value max_execution_time 300
答案 1 :(得分:2)
答案 2 :(得分:1)
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
。
答案 3 :(得分:0)
FOR SERVER:
在cPanel搜索php中,您将在Software下找到“Select PHP version”。 软件 - >选择PHP版本 - >切换到Php选项 - >变更价值 - >保存。
FOR LOCAL:
在xampp下的php文件夹中找到PHP ini(配置设置)文件。
更改
post_max_size = 40M
和upload_max_filesize = 40M