NOTE: This has been fixed in HTML_QuickForm version 3.2.4.
If you are working with the PHP PEAR package HTML_QuickForm and file uploads and you are registering rules for both “maxfilesize” and “uploadedfile” then you might be puzzled by some errors you might receive like I was. Let me see if I can explain this plainly.
An important component is your php.ini setting for “upload_max_filesize”. If this is smaller than your setting for “maxfilesize” then if you upload a file that is larger than the “upload_max_filesize” you will NEVER encounter the “maxfilesize” error you set for QuickForm. You will instead receive the “uploadedfile” error because, I’m guessing here, PHP is discarding the file that is too large and therefore QuickForm thinks there isn’t a file. I’ve put together this little example to explain.
Uploaded filesize | upload_max_filesize = 20MB / QF Rule maxfilesize = 10MB | upload_max_filesize = 10MB / QF Rule maxfilesize = 20MB |
---|---|---|
5 MB | success | success |
15 MB |
Error: maxfilesize Reason: filesize larger than maxfilesize but less than upload_max_filesize |
Error: uploadedfile Reason: filesize larger than upload_max_filesize |
25 MB |
Error: uploadedfile Reason: filesize larger than upload_max_filesize |
Error: uploadedfile Reason: filesize larger than upload_max_filesize |
What was puzzling me was when I uploaded a file larger than PHP would let me, I thought I’d get the maxfilesize error but instead I kept getting the uploadedfile error. And the uploadedfile error only returns what you tell it to return so I was telling myself what I was telling the form.
I think QuickForm should be smart enough about the maxfilesize to indicate when a programmer has specified a larger maxfilesize than PHP will allow but I’m not quite sure how that should be done. Should the form automatically adjust itself to the php.ini setting or throw a PHP error? Personally, I’d rather QF automatically adjust itself. We’ll see what the package owners think.