I am working on a PHP upload script and when testing my error checks, I attempted to upload a 17MB TIFF file. When I do this the $_FILES array is empty. The script works fine for what I need it to do, which is to upload JPEG files. My solution is to test if $_FILES is empty or not before continuing with the upload script.
Can anybody explain why $_FILES is empt开发者_运维知识库y when a TIFF is attempted to be uploaded? Is my solution, to check if $_FILES is empty or not, an okay one?
Does this have something to do with settings in php.ini
?
Just to clarify
I was checking that $_FILES
was empty using the following:
if(empty($_FILES))
{
die('$_FILES is empty.');
}
Yes, upload_max_filesize controls max upload size, which the TIFF file most likely exceeded. The default is 2M. You can test with:
echo ini_get("upload_max_filesize");
EDIT: Actually, the exact cause is more likely post_max_size, which is always >= upload_max_filesize: "If the size of post data is greater than post_max_size, the $_POST and $_FILES superglobals are empty."
You should check to see if $_FILES['file']['error']
is equal to 0
. This indicates a "success".
If your files array is empty, it might be due to some other problem, like not including the enctype.
Try doing var_dump($_FILES)
and viewing the contents...
EDIT: I know you can set the max filesize in the php.ini
file, but I am not sure if that will give you an empty files array. I think you will just get an error.
As posted already, it's empty because if failed. Also check for a form element like this:
<input type="hidden" name="MAX_FILE_SIZE" value="-maxsizegoeshereinbytes-" />
To be extra sure (once you actually have an array - adding to the 'check the error key' post, btw) , you can also check the size
if( $_FILES['file']['size'] > 0 ) {
}
精彩评论