Как предотвратить Предупреждение: длина содержимого и размер памяти POST

В настоящее время, когда пользователь загружает фотографию, на странице написано "Предупреждение: POST Content-Length из XXX байтов превышает предел 21000000 байт в Unknown on line 0".

Я знаю, что это значит, и я НЕ ищу такие решения, как увеличение значений max_upload или даже memory_size_limit... Поскольку пользователи могут и пользователи будут загружать терабайты бессмыслицы, даже если вы явно укажете их только макс. файлы размером 20 МБ и разрешены только изображения.

Я ищу решение по:

  • Как предотвратить это предупреждение (ы), чтобы даже произойти?
    ИЛИ по крайней мере:
  • Как предотвратить отображение этого предупреждения (ов)?

РЕДАКТИРОВАТЬ: ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ! - Пожалуйста, поймите, что , конечно, я обрабатываю ошибку/предупреждение после (начиная с строки 1), проблема происходит в виртуальной строке 0, поэтому мне нужно чтобы скрыть ошибку или предотвратить ее повышение - потому что я не могу положить какой-либо код перед местом, где происходит ошибка.

EDIT2: Наконец, после очень продолжительных исследований и копания у меня появилась идея - она ​​сработала - см. мой собственный ответ.

Ответ 1

Поэтому после поиска вместо работы сегодня я наконец понял, как это решить, он работал и даже не наносил большого ущерба. Но сначала поймите, что вы делаете, прежде чем делать это.:) Как я предложил в одном из моих комментариев, действительно можно отключить PHP-ошибки в .htacess - просто отключите предупреждения запуска PHP.

Перед тем, как применить решение:

Обратите внимание: после того, как вы вставляете этот код в свой .htaccess, вы не сможете увидеть any  ошибка запуска

Также обратите внимание: больше ошибок запуска в строке "0", чем этот.

До этого:. Перед тем, как сделать это, вы должны подготовить свой script таким образом, чтобы он проверял размер загруженного контента и предоставил пользователю правильное информационное сообщение. Тот факт, что предупреждение не показывает НЕ НЕ, означает, что вы ничего не должны с этим делать. Это означает EXACT oposite - вы должны сделать все возможное, чтобы сделать что-то хотя бы почти равным предупреждению рейза - проверьте, дважды проверьте, можете ли вы, обработать ошибку и поднять собственное сообщение об ошибке.

Добавьте это в свой .htaccess:

php_flag display_startup_errors off

Это не так плохо, как кажется:

Обратите внимание, что это отключает ошибки запуска только.
So все регулярные ошибки/предупреждения/предупреждения PHP остаются включенными:)

Даже XAMPP PHP "сам" рекомендует его для производства:

Литература php.ini говорит:

; display_startup_errors
;   Default Value: Off
;   Development Value: On
;   Production Value: Off

PS: "ошибка при запуске", по-видимому, это те ошибки до Выполняется сам PHP script - эти ошибки обычно пытаются "убедить" вас в том, что они находятся на линии 0.

Благодаря моей идее и этому ответу: Как отключить уведомление и предупреждение в PHP в файле .htaccess?

EDIT:. Поскольку это параметр php_flag, вы, конечно же, можете установить его по умолчанию в php.ini, если у вас есть настраиваемая установка PHP:)

Ответ 2

Вопрос

Как предотвратить предупреждение: POST Content-Length

ответ заключается в том, что без изменения какого-либо значения конфигурации поместите этот код в самом начале файла, который получит форму, подлежащую обработке:

 <?php // here start your php file
 ob_get_contents();
 ob_end_clean();

То есть. Больше никаких предупреждений, кроме всего прочего вы не хотите, как вывод на своей странице. После этого, как было предложено в другом месте, вы можете решить, что делать:

if($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) && empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0){ echo"WoW your file is too big!"; }

Возможно, также вырезать файл, если по-другому вы передадите правильные значения файла, который будет обрабатываться Php.

как описано здесь Предупреждение: POST Content-Lenght...

Ответ 3

У меня есть аналогичная проблема для вас, и задался вопросом, нашли ли вы удовлетворительное решение. В настоящее время мой "PHP Warning: POST Content-Length из 21010354 байт превышает предел 8388608" находится в журнале, и я не думаю, что я могу с этим справиться.

Я работаю в рамках Zend, и когда пользователь загружает файл, как указано выше, он в основном убивает весь обычный синтаксический анализ данных POST, поэтому ответ на getParams() не содержит никаких обычных параметров POST. Это означает, что пользователи получают ошибку проверки, заявив, что одно из полей отсутствует, что вводит в заблуждение.

В ходе исследования я нашел несколько интересных параметров php_ini, которые вы можете посмотреть, в частности enable_post_data_reading и always_populate_raw_post_data. В моем случае я загружаю 20-мегабайтный файл с 8M post max и 10M загруженным файлом max, и результат ввода php://кажется полным в 20-мегабайтном файле, хотя почтовые данные теперь пустые,

Итак, я собираюсь вручную проверить, превышает ли исходные данные предел, и предположить, что все произошло, если это произошло (и залог). Я предлагаю вам написать собственный код для анализа необработанных данных, чтобы заполнить данные $_POST. Затем вы можете запустить свой код, как хотите, и только когда вы будете готовы, проверьте, загрузил ли пользователь больше данных, чем лимит. Это вам, чтобы затем вернуть ошибку, прежде чем разбирать ее, или, если все в порядке, разобрать ее. До тех пор, пока вы устанавливаете ограничения на отправку и выгрузку PHP, превышаете лимит пользователя, он должен позволить пользователю нарушать правила, позволяя вашему коду обнаруживать затвор и жаловаться на него.

Ответ 4

Вот РЕАЛЬНОЕ решение, чтобы предотвратить эту ошибку.

Задайте эти параметры в php.ini:

enable_post_data_reading = On
upload_max_size=0
post_max_size=0

Предупреждение: обязательно введите эту строку в своей форме

<input type="hidden" name="MAX_FILE_SIZE" value="2048576" />

И САМЫЙ ВАЖНЫЙ:

  • обязательно проверьте ошибки кода $_FILES ['file'] ['error']

  • Обязательно проверьте размер своей загрузки на PHP тоже.

Ответ 5

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

Единственный способ - это выкопать исходный код PHP, найти, где эта ошибка будет выброшена, и удалить эту часть из источников PHP, прежде чем компилировать вашу версию php версии.

Но будьте осторожны, что сообщение об ошибке вызывается по какой-либо причине.

Ответ 6

Чтобы предотвратить эту ошибку, вы должны проверить размер загруженных файлов до и в случае, если они будут большими, вам нужно отменить загрузку!

Чтобы просто не показывать их, я думаю, этого должно быть достаточно, если вы напишете в своем PHP скрипт

error_reporting(0);

Ответ 7

1.Вы можете проверить размер файла перед загрузкой на JavaScript, но это может быть изменено!

2.Проверьте размер файла после , а затем сохраните файл.

<?php

$size = filesize($uploaded_file);
if($size > $your_size_limit)
{
    echo "Throw bunch of errors";
}
else
{
    //save it
}
?>

3. Не пытайтесь скрыть ошибки, чтобы решить проблему.