This is my upload form:
<form action="uploads.php" method="post" enctype="multipart/form-data">
<input name="fileupload" type="file" multiple>
<button>Upload</button>
</form>
My max upload sizes are set like this:
; Maximum allowed size for uploaded files.
upload_max_filesize = 5M
; Must be greater than or equal to upload_max_filesize
post_max_size = 5M
If I upload a file that is larger then 5M var_dump($_FILES)
is empty. I can do that:
if($_FILES){
echo "Upload done!";
}
$_FILES
is not set if the file is larger then 5M. But this is a bit strange. How would you do that?
EDIT:
var_dump of file over 5M:
array(0) {
}
var_dump of file <= 5M:
array(1) {
["fileupload"]=>
array(5) {
["name"]=>
string(13) "netzerk12.pdf"
["type"]=>
string(15) "application/pdf"
["tmp_name"]=>
string(22) "/tmp/uploads/phpWhm8M0"
["error"]=>
int(0)
["size"]=>
int(352361)
}
}
Like Rob mentioned, your post_max_size
should be greater than your upload_max_filesize
.
After that you can check $_FILES['fileupload']['error']
if it is UPLOAD_ERR_INI_SIZE
the uploaded file is to large.
So in your php.ini
set
; Maximum allowed size for uploaded files.
upload_max_filesize = 5M
; Must be greater than or equal to upload_max_filesize
post_max_size = 10M
In your uploads.php
check
if($_FILES['fileupload']['error'] === UPLOAD_ERR_INI_SIZE) {
// Handle the error
echo 'Your file is too large.';
die();
}
// check for the other possible errors
// http://php.net/manual/features.file-upload.errors.php
You could check the $_SERVER['CONTENT_LENGTH']
:
// check that post_max_size has not been reached
// convert_to_bytes is the function turn `5M` to bytes because $_SERVER['CONTENT_LENGTH'] is in bytes.
if (isset($_SERVER['CONTENT_LENGTH'])
&& (int) $_SERVER['CONTENT_LENGTH'] > convert_to_bytes(ini_get('post_max_size')))
{
// ... with your logic
throw new Exception('File too large!');
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With