Ich habe gerade ein Upgrade von Debian Lenny auf Squeeze durchgeführt und festgestellt, dass mein /var/log/apache2/errors.log mit den folgenden Fehlern bombardiert wird:
<b>Warning</b>: Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in <b>Unknown</b> on line <b>0</b><br />
<br />
<b>Warning</b>: Directive 'register_globals' is deprecated in PHP 5.3 and greater in <b>Unknown</b> on line <b>0</b><br />
Ich finde das seltsam, da dies ein Systemprotokoll ist und PHP (über Apache) versucht, HTML-Code hinein zu schreiben. Dies scheint bei jeder Seitenlast auf dem Server (einschließlich eines virtuellen Hosts) zu geschehen.
Das Deaktivieren dieser Werte ist derzeit keine Option (ich verwende eine nicht verwaltete Codebasis). Meine php.ini enthält unter anderem:
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
display_errors = On
register_globals = On
magic_quotes_gpc = On
Ich bin nicht sicher, ob dies ein Fehler mit PHP-Konfiguration oder Apache-Konfiguration ist. Weiß jemand, wie ich verhindern kann, dass diese Nachrichten bei jedem Seitenladen in error.log geschrieben werden?
- PHP: Version 5.3.2-2 Apache:
- Apache / 2.2.16 (Debian)
Danke, Gardar
quelle
Antworten:
Während die anderen Antworten hier verhindern , dass die Fehler in Ihr Fehlerprotokoll geschrieben werden, ignorieren sie einfach die Fehlermeldung und beheben den Fehler nicht .
Der Fehler in diesem Fall ist, dass Ihre php.ini noch entweder
magic_quotes_gpc on
odermagic_quotes_gpc off
irgendwo darin ist. Gleiches gilt fürregister_globals on
oderregister_globals off
.Der Fehler ist nicht, dass die Direktive ein- oder ausgeschaltet ist. Der Fehler ist, dass die Direktive überhaupt nicht existieren sollte. Kommentieren Sie diese Zeilen aus Ihrer php.ini oder entfernen Sie sie vollständig, und PHP schreibt keine Fehler mehr über veraltete Anweisungen.
Dies kann natürlich zu Problemen mit Ihrer Anwendung führen, wenn eine dieser Anwendungen aktiviert sein muss.
Der Grund, warum dies ein Fehler in PHP 5.3 ist, ist, dass diese Anweisungen in PHP 6 nicht einmal existieren und PHP 6 sich so verhält, als ob sie deaktiviert wären. Wenn Sie jemals ein Upgrade auf PHP 6 planen, ist jetzt ein guter Zeitpunkt, um mit dem Upgrade oder Ersetzen Ihrer Anwendung zu beginnen.
Eine andere Lösung, die Sie versuchen könnten, ist das Downgrade von PHP auf den Zweig 5.2 oder 5.1.
PHP-Schreibfehler in das Apache-Protokoll sind natürlich, da PHP als Apache-Modul ausgeführt wird. Sie können so etwas
error_log = /var/log/php_errors.log
in Ihre php.ini einfügen und Apache neu starten, um die PHP-Fehler von Ihren Apache-Fehlern zu trennen. Während Sie dort sind, dann würde ich empfehlen Wechseldisplay_errors
zuoff
. Fehlermeldungen können häufig vertrauliche Informationen enthalten, die ein Angreifer nicht sehen soll. Sie werden dies höchstwahrscheinlich in Ihrer php.ini sehen:Es gibt keinen vernünftigen Grund, warum die Fehlermeldungen HTML enthalten.
Um eine andere Frage zu beantworten, die Sie nicht gestellt haben, meldet PHP dies als Grund dafür,
in <b>Unknown</b> on line <b>0</b>
dass die Fehlermeldung für von Ihnen geschriebene Zeilen PHP-Code entwickelt wurde, der gefundene Fehler jedoch darin bestand, die php.ini zu analysieren, bevor sie überhaupt aufgetreten ist Lesen Sie eine einzelne Codezeile oder öffnen Sie sogar eine .php-Datei. Da es keine Datei geöffnet hat und keine Zeilennummer hat, werden sie als "Unbekannt" und "0" gemeldet.quelle
entferne ~ E_DEPRECATED
tadam :)
quelle
Dieses Verhalten kann vermieden werden, indem display_errors = Off gesetzt wird. Ich bin nicht ganz glücklich über diese Lösung. Das Schreiben eines Fehlers im HTML-Format in Protokolldateien erscheint mir seltsam. Wenn jemand dieses Verhalten versteht, sagen Sie es bitte :)
quelle