Как говорится в названии, я установил максимальную длину для журнала ошибок 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).