$_FILES["file"]["size"] returning 0?

A file which aborts for any reason (upload failed, exceeds limits, etc...) will show as size 0

You have to check for upload SUCCESS before you do ANYTHING with the rest of th eupload data:

if(array_key_exists('file', $_FILES)){
    if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
       echo 'upload was successful';
    } else {
       die("Upload failed with error code " . $_FILES['file']['error']);
    }
}

The error codes are defined here. In your case, if you've hardcoded a 2meg limit and someone uploads a 2.1 meg file, then the error code would be UPLOAD_ERR_INI_SIZE (aka 2), which is "exceeds limit set in .ini file".


if( $_FILES['file']['size'] && $_FILES['file']['size'] < (2<<20))

Try that.

<< is bitwise shift operator, decimal 2 is binary "10", then add 20 zeros.