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