Error Messages Explained PHP returns an appropriate error code along with the file array. The error code can be found in the error segment of the file array that is created during the file upload by PHP. In other words, the error might be found in. Introduced in PHP 5. Introduced in PHP 5. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with may help. Introduced in PHP 5. This is probably useful to someone. To Schoschie: You ask the question: Why make stuff complicated when you can make it easy? In a loop, that would be deadly... But there is a certain problem. You know there are two sides to generating errors. Because when you generate an Exception, your script will come to an halt and do whatever you have defined in catch clause. Now you dont want any client to see the Exception, do you? The client will want to know what error occured in simple words they can understand instead of wanting their web app crashed if upload fails. So, dont generate exceptions. These errors should be collected and shown to client in an elegant way. That's a little advice. The two widely known limits are the php. In addition to this PHP somehow got implemented a soft limit feature. This, however, is not true and has never been. Up til today there has never been a RFC proposing the usage of such named form field, nor has there been a browser actually checking its existance or content, or preventing anything. The PHP documentation implies that a browser may alert the user that his upload is too big - this is simply wrong. Please note that using this PHP feature is not a good idea. A form field can easily be changed by the client. If you have to check the size of a file, do it conventionally within your script, using a script-defined integer, not an arbitrary number you got from the HTTP client which always must be mistrusted from a security standpoint. Seems like PHP just introduced you to yet another common pitfall. Any number that you specify above that results in a failed upload without any informative error describing what went wrong. This happens regardless of how small the file you're uploading may be. On error, my page attempts to output the name of the original file. But what I discovered is that this original file name, which I maintained in a local variable, actually gets corrupted. Hopefully, this tidbit will save someone else some grief. Hope this helps someone. The reason we want to check the version is that the constants are not defined in earlier versions, and they appear later in the array. It also drops the constant's value 0,1,2, etc for the errors, in the likely event that they are changed later the code should still work fine. And what about multiple file upload? Upload doesnt work, and no error?