log_errors_max_len = 1024 в php.ini, но журнал php продолжает расти

Как говорится в названии, я установил максимальную длину для журнала ошибок php, но, похоже, он растет намного больше, чем 1024. Я использую правильный php.ini, я перезапустил apache и т. Д. Разрешения на журнал php равен 666.

Как это типично для PHP, это не совсем очевидно из названия параметра конфигурации или даже документации , но эта директива применяется к длине одного сообщения журнала , а не к длине файла журнала в целом.

Используйте логротат или аналогичный инструмент для того, что вы пытаетесь сделать.

Первоначальная мысль проверенного Паскаля :

log_errors_max_len integer

Установите максимальную длину log_errors в байтах. В error_log добавляется информация об источнике. По умолчанию 1024 и 0 позволяют вообще не применять максимальную длину. Эта длина применяется к зарегистрированным ошибкам, отображаемым ошибкам, а также к $ php_errormsg. Когда используется целое число, значение измеряется в байтах. Также могут использоваться сокращенные обозначения, как описано в этом FAQ.

В руководстве не log_errors_max_len что log_errors_max_len ссылается только на «тело» сообщения об ошибке. Это означает, что одна строка ошибки будет по-прежнему больше, чем указанная здесь длина.

Чтобы продемонстрировать, запустите этот код, используя log_errors_max_len=0 ( 0 означает неограниченное количество) и log_errors=1 :

 <?php // Set your server to these settings: // error_reporting=-1 // date.timezone=utc ;to suppress the error message "It is not safe to rely on the system's timezone settings."... echo$msg1; echo$msg2; 

Байтам, отправленным в error_log будет:

 [15-Jul-2015 01:23:45 utc] PHP Notice: Undefined variable: msg1 in C:\index.php on line 5 [15-Jul-2015 01:23:45 utc] PHP Notice: Undefined variable: msg2 in C:\index.php on line 5 ‏ 

Затем проверьте один и тот же код с помощью log_errors_max_len=4 и log_errors=1 . (Не забудьте перезагрузить сервер.) error_log теперь будет:

 [15-Jul-2015 01:23:45 utc] PHP Notice: Unde in C:\index.php on line 5 [15-Jul-2015 01:23:45 utc] PHP Notice: Unde in C:\index.php on line 5 ‏ 

(Обратите внимание, что ваше сообщение об ошибке добавлено с помощью « [15-Jul-2015 01:23:45 utc] PHP Notice: « и добавлено с помощью « in C:\index.php on line 1 », в результате чего линия длиннее, чем устанавливается log_errors_max_len .)

Эта проблема возникает не только с error_log , но и с выходом сервера, отправленным клиенту. Чтобы продемонстрировать, выполните тот же код выше, используя log_errors_max_len=4 , display_errors=1 , html_errors=0 , error_prepend_string="PPPP" и error_append_string="AAAA" . Вывод, отправленный клиенту:

 PPPP Notice: Unde in C:\index.php on line 5 AAAAPPPP Notice: Unde in C:\index.php on line 5 AAAA 

Теперь запустите тот же код, используя log_errors_max_len=4 , display_errors=1 , html_errors=1 , error_prepend_string="PPPP" и error_append_string="AAAA" . ( error_prepend_string и error_append_string применяются только к отображаемым ошибкам, а не к ошибкам в журнале). Вывод, отправленный клиенту:

 PPPP<br /> <b>Notice</b>: Unde in <b>C:\index.php</b> on line <b>5</b><br /> AAAAPPPP<br /> <b>Notice</b>: Unde in <b>C:\index.php</b> on line <b>5</b><br /> AAAA 

Также обратите внимание, что приведенные выше тесты возвращают те же результаты, даже если вы используете ignore_repeated_errors=0 . Это показывает, что перед сообщениями об ошибках рассматриваются «повторяющиеся ошибки».

(Ваши результаты могут отличаться в зависимости от используемого SAPI. Вышеуказанные тесты выполняются с использованием php-5.6.7-Win32-VC11-x86 CLI при выигрыше 8.1).