2009-12-27 2 views
8

Wie der Titel sagt, habe ich die maximale Länge für die PHP-Fehlerprotokoll, aber es scheint zu wachsen viel viel größer als 1024. Ich benutze die Korrekte php.ini, ich habe Apache neu gestartet, etc. Die Berechtigungen für das PHP-Protokoll sind 666.log_errors_max_len = 1024 in php.ini, aber PHP-Protokoll wächst weiter

+2

Nur aus Neugier geht diese Richtlinie konfiguriert die Gesamtlänge der Datei (was wenig Sinn macht, da der Standardwert 1024 Bytes ist) oder nur die maximale Länge eines Eintrags/einer Zeile? –

+1

Es gibt mehrere 'php.ini' Konfigurationsparameter, die auf eine etwas nicht-intuitive Weise zusammenarbeiten. Was sind auf Ihrem System die Werte von 'log-errors' http://www.php.net/manual/en/errorfunc.configuration.php#ini.log-errors und' error-log' http: // www .php.net/manual/de/errorfunc.configuration.php # ini.error-log? – Asaph

Antwort

21

Wie für PHP typisch ist, ist es nicht wirklich offensichtlich, aus dem Namen der Konfigurationseinstellung, oder sogar die documentation, aber diese Direktive gilt für die Länge einer einzigen Protokollnachricht, nicht die Länge der Protokolldatei als Ganzes.

Verwenden Sie Logrotate oder ein ähnliches Tool für das, was Sie versuchen zu tun.

+0

danke! Das ist sehr hilfreich –

6

Verifiziert Pascal's initial thought:

log_errors_max_len integer

Stellen die maximale Länge der log_errors in Bytes. In error_log Informationen über die Quelle hinzugefügt wird. Der Standardwert ist 1024 und 0 erlaubt es überhaupt keine maximale Länge anzuwenden. Diese Länge ist auf protokollierte Fehler angewendet, angezeigt Fehler und auch auf $ php_errormsg. Wenn eine Ganzzahl verwendet wird, wird der Wert in Byte angegeben. Kurzschreibweise, wie in dieser FAQ beschrieben, kann auch verwendet werden.

3

Was das Handbuch nicht Staat tut, ist, dass log_errors_max_len bezieht sich nur auf den „Körper“ der Fehlermeldung. Dies bedeutet, dass eine einzelne Zeile mit dem Fehler immer noch größer als die hier eingestellte Länge ist.

Um zu demonstrieren, diesen Code ausführen mit log_errors_max_len=0 (0 unbegrenzte Mittel) und 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; 

Die Bytes an error_log gesendet werden:

[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 
‏ 

Als nächstes testen Sie den gleichen Code mit log_errors_max_len=4 und log_errors=1. (Denken Sie daran, den Server neu zu starten.) error_log wird nun sein:

[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 
‏ 

(Beachten Sie, dass Ihre Fehlermeldung mit „[15-Jul-2015 01:23:45 utc] PHP Notice:“ und den beigefügten mit „in C:\index.php on line 1“ vorangestellt wird, was zu einer Linie mehr als das, was durch log_errors_max_len gesetzt .)

Dieses Problem tritt nicht nur mit , sondern auch mit der Server-Ausgabe an den Client gesendet. Führen Sie denselben Code wie oben unter Verwendung von log_errors_max_len=4, display_errors=1, html_errors=0, error_prepend_string="PPPP" und error_append_string="AAAA" aus.Die Ausgabe an den Client gesendet wird:

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

Jetzt führen Sie den gleichen Code mit log_errors_max_len=4, display_errors=1, html_errors=1, error_prepend_string="PPPP" und error_append_string="AAAA". (. error_prepend_string und error_append_string gelten nur für angezeigte Fehler, nicht protokollierten Fehler) Die Ausgabe an den Client gesendet wird:

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 

Beachten Sie auch, dass die obigen Tests die gleichen Ergebnisse liefern würden, auch wenn Sie ignore_repeated_errors=0 verwenden. Dies zeigt, dass "wiederholte Fehler" vor die Fehlermeldungen abgeschnitten werden.

(Ihre Ergebnisse können abhängig von der SAPI unterscheiden verwendet. Vor Tests werden mit PHP-5.6.7-Win32-VC11-x86-CLI auf Win 8.1 getan.)