Я пытаюсь загрузить что-то с помощью PHP и установить ограничение на общий размер, который я разрешаю загружать. Я хочу ограничить мои загрузки до 2 МБ, но по какой-то причине, когда я пытаюсь проверить с помощью оператора if, как это:
if (($_FILES["file"]["size"] < 2097152))
Файл большой (например, файл 7mb) будет проходить через оператор if, потому что по какой-либо причине, если я напечатаю $ _FILES ["file"] ["size"], он вернет 0 вместо правильного количества байтов , Если я попытаюсь загрузить что-то меньшее, например, 342kb, то $ _FILES ["file"] ["size"] вернет правильный размер.
Есть ли способ получить $ _FILES ["файл"] ["размер"], чтобы фактически сохранить правильный размер файла? В противном случае я не знаю, как исправить эту проблему.
Файл, который прерывается по какой-либо причине (загрузка не удалась, превышает пределы и т. Д.), Будет отображаться как размер 0
Вы должны проверить загрузку УСПЕХА, прежде чем делать что-либо с остальными данными 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-файле».
if( $_FILES['file']['size'] && $_FILES['file']['size'] < (2<<20))
Попробуй это.
<< – оператор побитового сдвига, десятичный 2 – двоичный «10», затем добавьте 20 нулей.
Как я предположил в своем предыдущем комментарии, ваша проблема в том, что ограничение загружаемого файла в php.ini меньше 7 МБ.
Поэтому вы можете попытаться использовать
if ($_FILES["file"]["size"] > 0 && $_FILES["file"]["size"] < 2097152)
Учтите, что если вы установите ограничение (в php.ini) на 2 МБ, эта проверка может быть легко записана как
if ($_FILES["file"]["size"] > 0)