$ _FILES [ "file" ] [ "size" ] возвращает 0?
Я пытаюсь загрузить что-то с помощью PHP и установить ограничение на общий размер, который я могу загрузить. Я хочу ограничить свои загрузки до 2 МБ, но по какой-то причине, когда я пытаюсь проверить с помощью оператора if, как это:
if (($_FILES["file"]["size"] < 2097152))
Файл большой (например, файл 7mb) будет проходить через оператор if, потому что по какой-либо причине, если я напечатаю $_FILES [ "file" ] [ "size" ], он вернет 0 вместо правильного количество байтов. Если я попытаюсь загрузить что-то меньшее, например, 342kb, то $_FILES [ "file" ] [ "size" ] вернет правильный размер.
Есть ли способ получить $_FILES [ "файл" ] [ "размер" ], чтобы фактически сохранить правильный размер файла? В противном случае я не знаю, как решить эту проблему.
Ответы
Ответ 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)