This problem seems directly related to the infamous 2GB limit and I'm not sure at this atge if its a 32bit PHP issue. I've seen the comments related to HTTP not being designed for such large files. However, I would rather exhaust this direction before deciding on any fundamental change to what has been proven to work so far. As the title suggest I need to upload >2GB files, largest so far 3.8GB. I have a form built using jQuery-file-upload which has had no problems sending any files (all less <2GB) until these large ones started. The 3.8GB one takes maybe 5 minutes to upload from File-Upload and the progress bar completes to 100%. However the reported error after upload is a type 1 which suggests the file size limit has been breached.
If I monitor the disk usage on the server during upload it will have the following sample properties: Before upload the disk is 30% used, as the upload continues this usage increases, 31%,32%....45%,46%etc. However at around the 2GB point the disk usage drops back to 30% while the client/browser File-Upload continues. When the servers disk usage stops increasing the client may only be at 60% of the upload. Yet the client still continues to 100% but isn't being accepted by the server as the disk status never moves off 30%.
I'm running 64Bit Ubuntu (latest) with Apache/2.2.22 (Ubuntu) and PHP Version 5.3.10-1ubuntu3.2 After many days on and off searching for a solution I still cannot get the 3.8GB file to upload after changing so many settings. I'll list the sort of changes below but at this stage I think it may be a 32bit PHP issue so if anyone can suggest a link worth following or solution worth trying I'd appreciate it.
In Apache2 I've set the following:
- apache2.conf I've set Timeout to 900
- httpd.conf I've set LimitRequestBody to 0
- .htaccess in the file upload directory I've set:
- LimitRequestBody to 4939212390
- php_value upload_max_filesize 4831838208
- php_value post_max_size 4939212390
In php.ini I've set the following:
- UPLOAD_MAX_FILESIZE 4831838208
- POST_MAX_SIZE 4939212390
- max_execution_time 120
- max_input_time 60
- memory_limit 128M
If I run the following on the server it would seem the PHP does not have a 32bit issue but I'm not sure at this stage.
php -r "echo PHP_INT_MAX;"
9223372036854775807
As I mentioned any ideas would be greatly appreciated.
UPDATE:
Have solved this issue, so thanks to @BogdanBurim for suggesting the back to basics approach:
I have managed to upload a 3.8 GB file over HTTP with the following settings:
In Apache2 I've set the following:
- apache2.conf I've set Timeout to 900
- httpd.conf I've set LimitRequestBody to 0
- .htaccess in the file upload directory I've set:
- LimitRequestBody to 0
- php_value upload_max_filesize 0
- php_value post_max_size 4939212390
- .htaccess in the php temp directory (in my case its /tmp/) I've set:
- LimitRequestBody to 0
- php_value upload_max_filesize 0
- php_value post_max_size 4939212390
In php.ini I've set the following:
- UPLOAD_MAX_FILESIZE 0
- POST_MAX_SIZE 4939212390
- max_execution_time 120
- max_input_time 60
- memory_limit 128M
The only other important part of this solution was having to remove the MAX_FILE_SIZE, HTML from the upload form:
<input type="hidden" name="MAX_FILE_SIZE" value="4939212390" />
Having this set continually caused a PHP type 2 error, so php couldn't handle the greater than 32bit integer that is set. Removing it caused PHP type 1 errors until I changed the UPLOAD_MAX_FILESIZE to 0 everywhere and hey presto it now works!!!!