PHP - empty $_POST and $_FILES - when uploading larger files
Solution 1:
As noted in the edited question $_POST and $_FILES are empty when PHP silently discards data (happens when the actual data is bigger than post_max_size). Since HTTP header and $_GET remain intact those can be used to detect the discards.
Option a)
if(intval($_SERVER['CONTENT_LENGTH'])>0 && count($_POST)===0){
throw new Exception('PHP discarded POST data because of request exceeding post_max_size.');
}
Option b)
Add a GET parameter that tells whether POST data is present.
Solution 2:
Run phpinfo()
and check to make sure your upload_max_filesize
and post_max_size
directives are large enough.
http://us.php.net/manual/en/ini.core.php#ini.upload-max-filesize
http://us.php.net/manual/en/ini.core.php#ini.post-max-size
Solution 3:
There are some limits - both on client and server side.
On client side, the MAX_FILE_SIZE field is not of much use, perhaps browser may take it as a hint; but rather browsers follow their configured limits.
On server side, check php.ini for:
upload_max_filesize = 5M
post_max_size = 5M
max_input_time = ...
Also check Apache's log for notes about dropped POST body or such.