WP_DEBUG ist nicht gesetzt, aber ich erhalte immer noch Warnungen

13

Wenn WP_DEBUG nicht gesetzt ist, so wie ich es verstehe, sollten Sie niemals Warnungen sehen. Aber auf einigen Sites auf einigen Servern sehe ich immer noch ein paar. Nicht alle Warnungen, die angezeigt würden, wenn WP_DEBUG gesetzt wäre, sondern nur einige wenige.

Ich habe versucht, die Fehlerstufe in der php.ini zu ändern, aber das scheint keinen Einfluss darauf zu haben, ob Warnungen angezeigt werden oder nicht, aber sie erscheinen in unterschiedlicher Menge auf verschiedenen Servern (dh keine Warnungen bei der Entwicklung, eine Warnung beim Staging und noch ein paar warnhinweise zur produktion).

tomdxw
quelle
Handelt es sich definitiv um Warnungen oder um schwerwiegende Fehler?
TheDeadMedic

Antworten:

7

WP_DEBUG hat keinen Einfluss auf die PHP-Fehlerausgabe. Setzen Sie in Ihrer php.ini-Datei zusätzlich zur Einstellung error_reporting den Wert display_errors = 0. Es ist standardmäßig für die Entwicklung aktiviert. Auf Produktionsservern sollte es jedoch deaktiviert sein.

Dave Konopka
quelle
Um wp-includes / load.php zu paraphrasieren: if (WP_DEBUG) error_reporting (E_ALL). Aber es scheint so, als ob mehrere Plugins mit error_reporting und display_errors herumspielen, wenn dies wahrscheinlich nicht der Fall sein sollte.
Tomdxw
1
Ah - du hast recht, display_errors wurde in meiner php.ini auf On gesetzt. Ich habe gerade angenommen, dass WP_DEBUG sich um alle Fehler gekümmert hat. Vielen Dank.
Tomdxw
21

Ersetzen

define('WP_DEBUG', false);

mit diesem:

ini_set('log_errors','On');

ini_set('display_errors','Off');

ini_set('error_reporting', E_ALL );

define('WP_DEBUG', false);

define('WP_DEBUG_LOG', true);

define('WP_DEBUG_DISPLAY', false);
RAM
quelle
4
Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu.
fuxia
Wahrscheinlich sind die Fehler auf dem Bildschirm ausgeschaltet, aber Sie können sie auf Ihrem Server im Fehlerprotokoll sehen
user2060451 28.10.16
3

Es ist auch möglich, dass diese Zeile bereits auf false gesetzt ist. In diesem Fall sehen Sie den folgenden Code:

define('WP_DEBUG', false);

In beiden Fällen müssen Sie diese Zeile durch den folgenden Code ersetzen:

ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);

Vergessen Sie nicht, Ihre Änderungen zu speichern und die Datei wp-config.php wieder auf den Server hochzuladen.

Logic Digger
quelle
1

Versuchen Sie, alle Fehlerwarnungen / -hinweise in Ihrem wp-config.php(oberen) Bereich zu deaktivieren / zu unterdrücken . Wie auch immer: Fehler sind nichts Schlimmes. Sie geben Ihnen die Möglichkeit, Ihren Code zu reparieren.

Kaiser
quelle
Ich denke, es waren die Plugins anderer Leute, die mit error_reporting spielten, die das verursacht haben.
Tomdxw
1

In WordPress-Umgebungen gibt es normalerweise keinen Grund zur Verwendung ini_set da die von WordPress Core bereitgestellten definierten Konstanten dies bereits erreichen. PHP funktioniert so, dass bestimmte Einstellungen in Ihrem CMS (WordPress), in einzelnen Skripten und sogar pro Benutzer oder pro Verzeichnis außer Kraft gesetzt werden können (sehr zur Frustration von Webhosts und Agenturen).

Die einzige Einstellung, die Sie wirklich benötigen, um zu verhindern, dass Fehler auf einer Seite in WordPress angezeigt werden, ist:

define('WP_DEBUG', false);

...weil wenn WP_DEBUG deaktiviert, sind die Unteroptionen dann inaktiv:

define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', false);

Beachten Sie, dass sich die verwirrende WP_DEBUG_LOGOption nur auf die Erstellung von beziehtdebug.log innerhalb des Verzeichnisses wp-contentbezieht und sich nicht auf andere Protokolleinstellungen usw. auswirkt.

Auch hier können die Einstellungen in WordPress die Standard-PHP-Einstellungen überschreiben, sodass Ihre PHP-Einstellungen weniger wichtig sind als die korrekten Einstellungen in Ihrem wp-config.php Datei, die vor anderen WP-Komponenten geladen wird.

Trotzdem ist es eine gute Idee, die folgenden Standardeinstellungen in der Produktion zu implementieren:

error_reporting = E_ERROR | E_WARNING | E_PARSE
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/www/logs/error.log
log_errors_max_len = 1024
ignore_repeated_errors = On
ignore_repeated_source = Off
report_memleaks = On
xmlrpc_errors = 0
html_errors = Off

Ein vollständiges Beispiel finden Sie in unserer für Nginx und PHP-FPM optimierten SlickStack-Datei php.ini .

In einem Fall stellten wir nach stundenlanger Recherche fest, dass ein Plugin (oder Thema) die verschiedenen Einstellungen für die Fehlerbehandlung überschrieb, die zuvor festgelegt wurden php.ini undwp-config.php . Die einzige Möglichkeit, dies zu verhindern, besteht darin, das WordPress-Plugin oder -Thema zu entfernen, das versucht, Ihre PHP-Einstellungen zu "hacken", oder sie anzuweisen, es zu entfernen, da dies eine sehr schlechte Praxis ist, wenn Erweiterungen die Debug-Optionen Ihres CMS überschreiben.

In SlickStack haben wir ein Bash - Skript , dass „Flags“ jede ini_setund error_reportingLinien von PHP - Dateien in die /themes/und /plugins/Verzeichnisse , die von solchen Fällen Hervorhebung eines MU - Plugin (PHP - Skript) , dass zeigt eine Liste solcher „Hacks“ in der WP Admin Dashboard.

Jessuppi
quelle