Подтвердить что ты не робот

$ _FILES [ "file" ] [ "size" ] возвращает 0?

Я пытаюсь загрузить что-то с помощью PHP и установить ограничение на общий размер, который я могу загрузить. Я хочу ограничить свои загрузки до 2 МБ, но по какой-то причине, когда я пытаюсь проверить с помощью оператора if, как это:

if (($_FILES["file"]["size"] < 2097152))

Файл большой (например, файл 7mb) будет проходить через оператор if, потому что по какой-либо причине, если я напечатаю $_FILES [ "file" ] [ "size" ], он вернет 0 вместо правильного количество байтов. Если я попытаюсь загрузить что-то меньшее, например, 342kb, то $_FILES [ "file" ] [ "size" ] вернет правильный размер.

Есть ли способ получить $_FILES [ "файл" ] [ "размер" ], чтобы фактически сохранить правильный размер файла? В противном случае я не знаю, как решить эту проблему.

4b9b3361

Ответ 1

Файл, который прерывается по какой-либо причине (загрузка не удалась, превышает пределы и т.д.), будет отображаться как размер 0

Вы должны проверить загрузку SUCCESS, прежде чем делать что-либо с остальными данными eupload:

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']);
    }
}

Коды ошибок определены здесь. В вашем случае, если вы жестко закодировали лимит в 2 миллиона, а кто-то загрузил 2,1-мегабайтный файл, тогда код ошибки будет UPLOAD_ERR_INI_SIZE (aka 2), который "превышает ограничение, установленное в .ini файле".

Ответ 2

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

Попробуйте это.

< < является оператором побитового сдвига, десятичная дробь 2 - двоичная "10", затем добавляет 20 нулей.

Ответ 3

Как я предполагал в своем предыдущем комментарии, ваша проблема заключается в том, что предел загружаемого файла в php.ini меньше 7 МБ.
Поэтому вы можете попробовать использовать

if ($_FILES["file"]["size"] > 0 && $_FILES["file"]["size"] < 2097152)

Учтите, что если вы поместите свой лимит (в php.ini) на 2 МБ, эта проверка может быть легко записана как

if ($_FILES["file"]["size"] > 0)