PHP Warning: POST Content-Length из n байтов превышает предел 3145728 байт в Unknown в строке 0

Я довольно удивлен, обнаружив вышеупомянутую ошибку в своем журнале ошибок, потому что я думал, что уже сделал необходимую работу, чтобы поймать ошибку в моем PHP-скрипте:

if ($_FILES['image']['error'] == 0) { // go ahead to process the image file } else { // determine the error switch($_FILES['image']['error']) { case "1": $msg = "Uploaded file exceeds the upload_max_filesize directive in php.ini."; break; .... } } 

В моем скрипте PHP.ini соответствующие настройки:

 memory_limit = 128M post_max_size = 3M upload_max_filesize = 500K 

Я понимаю, что 3M эквивалентно 3145728 байтам и что это то, что вызывает ошибку. Если размер файла превышает 500 тыс., Но меньше 3 М, скрипт PHP будет работать в обычном режиме, выдавая сообщение об ошибке в $msg как в case 1 .

Как я могу уловить эту ошибку вместо того, чтобы позволить скрипту внезапно прекратиться с предупреждением PHP, когда размер сообщения превышает post_max_size но все еще в пределах лимита памяти? Я посмотрел на подобные вопросы здесь , здесь и здесь , но не смог найти ответа.

Related of "PHP Warning: POST Content-Length из n байтов превышает предел 3145728 байт в Unknown в строке 0"

Нашел альтернативное решение, которое напрямую не касается ошибки. Следующий код написан инженером-программистом Andrew Curioso в его блоге :

 if($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) && empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0) { $displayMaxSize = ini_get('post_max_size'); switch(substr($displayMaxSize,-1)) { case 'G': $displayMaxSize = $displayMaxSize * 1024; case 'M': $displayMaxSize = $displayMaxSize * 1024; case 'K': $displayMaxSize = $displayMaxSize * 1024; } $error = 'Posted data is too large. '. $_SERVER[CONTENT_LENGTH]. ' bytes exceeds the maximum size of '. $displayMaxSize.' bytes.'; } 

Как объясняется в его статье, когда размер сообщения превышает post_max_size , супер глобальные массивы $_POST и $_FILES станут пустыми. Таким образом, проверяя эти данные и подтверждая, что есть некоторый контент, отправляемый с использованием метода POST, можно предположить, что такая ошибка произошла.

На самом деле есть аналогичный вопрос, который мне раньше не удавалось найти.

Вы могли бы проверить его с помощью javascript прежде, чем загрузка даже состоится?

 // Assumed input for file in your HTML <input type="file" id="myFile" /> //binds to onchange event of your input field $('#myFile').bind('change', function() { alert(this.files[0].size); }); 

Вы можете также попытаться поймать его:

 try { if (!move_uploaded_file( 'blah blah' )) { throw new Exception('Too damn big.'); } // Can do your other error checking here... echo "Upload Complete!"; } catch (Exception $e) { die ('File did not upload: ' . $e->getMessage()); }