Ich muss mein PHP-Skript oben einrichten, um die Fehlerberichterstattung für strenge Standards zu deaktivieren.
Kann jemand helfen?
Ich muss mein PHP-Skript oben einrichten, um die Fehlerberichterstattung für strenge Standards zu deaktivieren.
Kann jemand helfen?
Antworten:
Möchten Sie die Fehlerberichterstattung deaktivieren oder nur verhindern, dass der Benutzer sie sieht? Es ist normalerweise eine gute Idee, Fehler auch auf einer Produktionsstätte zu protokollieren.
# in your PHP code:
ini_set('display_errors', '0'); # don't show any errors...
error_reporting(E_ALL | E_STRICT); # ...but do log them
Sie werden in Ihrem Standardsystemprotokoll protokolliert, oder verwenden Sie die error_log
Anweisung, um genau anzugeben, wohin Fehler gehen sollen.
php.ini
Datei festlegen , z. B. wenn Sie den PHP-Code nicht ändern können.
php.ini
oder .htaccess
oder irgendwo in meinem PHP-Code.
Für keine Fehler.
error_reporting(0);
oder für einfach nicht streng
error_reporting(E_ALL ^ E_STRICT);
und wenn Sie jemals wieder alle Fehler anzeigen möchten, verwenden Sie
error_reporting(-1);
^
ist nur gut, um eine Art von Fehler wegzulassen. Wenn Sie zusätzliche Typen deaktivieren möchten, sollten Sie das E_ALL & ~E_DEPRECATED & ~E_STRICT
Format verwenden. Oder vielleicht das (E_ALL & ~(E_DEPRECATED | E_STRICT))
Format.
ini_set('error_reporting', E_ALL&~E_STRICT);
Unterdrückung der Meldung von STRICT-Fehlern in PHP> = 5.4ini_set('error_reporting', E_ALL^E_STRICT);
^
("xor") anstelle von & ~
("und nicht") eine schlechte Idee ist ! ^
hängt von der Annahme ab, dass zB E_STRICT Teil von E_ALL ist und immer Teil davon sein wird. Dies ist schlecht, da sich E_ALL in der Vergangenheit geändert hat (E_STRICT war nicht vorbei, ist aber jetzt seit PHP 5.4). Wenn die Annahme eines Tages fehlschlägt, ^
wird sie nicht nur brechen, sondern tatsächlich das Gegenteil von dem tun, was sie tun soll: Sie aktiviert E_STRICT aufgrund der Funktionsweise von XOR ( ^
). Deaktiviert & ~
jedoch immer E_STRICT, unabhängig vom aktuellen Wert von E_ALL. Daher & ~
sollte verwendet werden.
Alle oben genannten Lösungen sind korrekt. Wenn es sich jedoch um eine normale PHP-Anwendung handelt, müssen sie auf jeder Seite enthalten sein, die sie benötigt. Eine Möglichkeit, dies zu lösen, finden Sie .htaccess
im Stammordner. Nur um die Fehler zu verbergen. [Fügen Sie eine der folgenden Zeilen in die Datei ein]
php_flag display_errors off
Oder
php_value display_errors 0
Als nächstes legen Sie die Fehlerberichterstattung fest
php_value error_reporting 30719
Wenn Sie sich fragen, wie der Wert 30719
entstanden ist, sind E_ALL (32767), E_STRICT (2048) tatsächlich konstant und enthalten den numerischen Wert und ( 32767 - 2048 = 30719
)
php_admin_value error_reporting
dafür gearbeitet (in der vhost-Konfiguration).
Der Standardwert des Flags error_reporting ist E_ALL & ~ E_NOTICE, wenn er nicht in php.ini gesetzt ist. In einigen Installationen (insbesondere Installationen, die auf Entwicklungsumgebungen abzielen) ist jedoch E_ALL | vorhanden E_STRICT als Wert dieses Flags gesetzt (dies ist der empfohlene Wert während der Entwicklung ). In einigen Fällen, insbesondere wenn Sie einige Open-Source-Projekte ausführen möchten, die vor der PHP 5.3-Ära entwickelt und noch nicht mit den in PHP 5.3 definierten Best Practices in Ihrer Entwicklungsumgebung aktualisiert wurden, werden Sie wahrscheinlich auf einige stoßen Nachrichten wie Sie erhalten. Der beste Weg, um mit dieser Situation fertig zu werden, besteht darin, nur E_ALL als Wert für das Flag error_reporting festzulegen , entweder inphp.ini oder im Code (wahrscheinlich in einem Front-Controller wie index.php im Web-Root wie folgt:
if(defined('E_STRICT')){
error_reporting(E_ALL);
}
WordPress
Wenn Sie in der WordPress-Umgebung arbeiten, legt Wordpress die Fehlerstufe in der Datei wp-includes / load.php in function fest wp_debug_mode()
. Sie müssen also die Ebene ändern, nachdem diese Funktion aufgerufen wurde (in einer Datei, die nicht in git eingecheckt ist, sodass dies nur für die Entwicklung gilt), oder entweder den error_reporting()
Aufruf direkt ändern
Ich habe keine Antwort gesehen, die sauber und für produktionsbereite Software geeignet ist.
/*
* Get current error_reporting value,
* so that we don't lose preferences set in php.ini and .htaccess
* and accidently reenable message types disabled in those.
*
* If you want to disable e.g. E_STRICT on a global level,
* use php.ini (or .htaccess for folder-level)
*/
$old_error_reporting = error_reporting();
/*
* Disable E_STRICT on top of current error_reporting.
*
* Note: do NOT use ^ for disabling error message types,
* as ^ will re-ENABLE the message type if it happens to be disabled already!
*/
error_reporting($old_error_reporting & ~E_STRICT);
// code that should not emit E_STRICT messages goes here
/*
* Optional, depending on if/what code comes after.
* Restore old settings.
*/
error_reporting($old_error_reporting);
E_ALL & ~E_DEPRECATED & ~E_STRICT
für die Produktion auf zu setzen. Beachten Sie, dass sie vorschlagen, dass Sie strenge Standards deaktivieren.