Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Strange problem while uploading large files

I am having a strange problem while uploading large files in PHP.

In php.ini, max_execution_time is set to 30, post_max_size is set to 32M, upload_max_filesize is set to 32M. When I tried to upload a file of size 40.2 MB, it don't show any error. The $_FILES variable has the value array(0) { } and $_FILES['userfile'] shows NULL.

If the file size is more than the value set in php.ini, then it should return the error message

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

But it's not showing any error either (as $_FILES is an empty array). I am clueless why this is happening.

When I change in php.ini and set post_max_size is set to 64M, upload_max_filesize is set to 64M, then it works fine. So, I decided to use the following code, instead of changing php.ini file.

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

I even tried to increase max_execution_time. Still, I am having the same problem. ini_set() is not working here.

like image 726
Debiprasad Avatar asked Aug 22 '10 20:08

Debiprasad


3 Answers

To have the 40 MB file fail with upload error, you have to increase the post_max_size, if you exceed the value of that variable, you get an empty $_FILES array. See the manual

If the size of post data is greater than post_max_size, the $_POST and $_FILES superglobals are empty.

Also, ini_set() is not working there because two of the variables you are trying to change are PHP_INI_PERDIR and thus need to be changed in php.ini or in .htaccess or httpd.conf. You should try the 40MB file with, for example, these settings in .htaccess

php_value upload_max_filesize 32M
php_value post_max_size 64M
php_value max_execution_time 300
like image 185
Vinko Vrsalovic Avatar answered Oct 31 '22 01:10

Vinko Vrsalovic


There is one more setting you may need to look at, Apache's LimitRequestBody.

If the file exceeds that, the upload may get blocked before it even reaches PHP.

Apache Documentation

like image 26
Pekka Avatar answered Oct 31 '22 03:10

Pekka


ini_set() is not working here.

The values you are trying to change with ini_set(), except for max_execution_time, cannot be changed with ini_set().
In the list of php.ini directives, they are reported to be of type PHP_INI_PERDIR, which means (as explained in Where a configuration setting may be set) that they can changed in php.ini, .htaccess or httpd.conf. Configuration settings that can be changed with ini_set() are the ones marked as PHP_INI_USER.

like image 39
apaderno Avatar answered Oct 31 '22 02:10

apaderno