PHP 5 deaktiviert strenge Standardfehler

175

Ich muss mein PHP-Skript oben einrichten, um die Fehlerberichterstattung für strenge Standards zu deaktivieren.

Kann jemand helfen?

Manny Calavera
quelle
8
@ 451F: Ich denke, die Schlüsselwörter hier sind "strenge Standards". Ich weiß nichts über frühere Versionen, aber mit PHP 5.4.0 wird empfohlen, die Fehlerberichterstattung E_ALL & ~E_DEPRECATED & ~E_STRICTfür die Produktion auf zu setzen. Beachten Sie, dass sie vorschlagen, dass Sie strenge Standards deaktivieren.
Fake Code Monkey Rashid
Suchen Sie auch Ihre php.ini-Datei und kopieren Sie sie nach / usr / local / php5 / lib /
yadhu

Antworten:

185

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_logAnweisung, um genau anzugeben, wohin Fehler gehen sollen.

Nate
quelle
11
Nur um das Offensichtliche explizit auszudrücken: Natürlich können Sie diese auch in Ihrer php.iniDatei festlegen , z. B. wenn Sie den PHP-Code nicht ändern können.
Sschuberth
1
Das Protokollieren strenger Produktionsfehler ist jedoch ebenfalls eine schlechte Praxis. Da Sie Ihre Protokolle mit Hinweisen füllen, die wahrscheinlich keine Rolle spielen, verursacht dies eines oder beide der folgenden Probleme: serverAdmin übersieht / ignoriert Fehler und das Protokollverzeichnis belegt irgendwann den gesamten Serverplatz.
Lance
4
Dies funktioniert nicht für mich - musste E_ALL & ~ E_STRICT von Fake Code Monkey Rashid Kommentar von Antwort unten verwenden
einfach
1
Wie funktioniert das neben dem, was ich in meiner php.ini gefunden habe? log_errors = On Vs ini_set ('display_errors', '0'); Ist der letzte Satz gewinnt?
landete am
@nate Wenn Sie einen Code veröffentlichen, teilen Sie uns bitte mit, wo wir ihn einfügen können. Ich weiß nicht, wo ich es ablegen soll: in php.inioder .htaccessoder irgendwo in meinem PHP-Code.
23аниил Пронин
89

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);

Tyler Carter
quelle
56
+1: Ich glaube, das ^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_STRICTFormat verwenden. Oder vielleicht das (E_ALL & ~(E_DEPRECATED | E_STRICT))Format.
Fake Code Monkey Rashid
10
Hinweis: E_STRICT ist erst seit php 5.4
Fred Haslam
@FakeCodeMonkeyRashid Ich frage mich, warum das so ist? wahrscheinlich weil dann die evaulationsreihenfolge wichtig ist?
Codeling
Unterdrückung der Meldung von STRICT-Fehlern in PHP <5.4 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);
Mel_T
Ich möchte darauf hinweisen, dass die Verwendung von ^("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.
Jay
31

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 .htaccessim 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 30719entstanden ist, sind E_ALL (32767), E_STRICT (2048) tatsächlich konstant und enthalten den numerischen Wert und ( 32767 - 2048 = 30719)

Starx
quelle
2
Vielen Dank - dies hat den Trick (.htaccess-Lösung) in PHP 5.4.7 gemacht - nichts anderes - sogar das Ändern der .ini - hat den Trick gemacht.
Ich habe php_admin_value error_reportingdafür gearbeitet (in der vhost-Konfiguration).
Lou Terrailloune
@Seza, richtig behoben.
Starx
1
Da es sich nicht um die Seite handelt, wird diese Methode bevorzugt, da die meisten E_STRICT-Fehler zur Kompilierungszeit vorliegen und zur Laufzeit nicht überschrieben werden können
AbiusX
2
Hallo, nur um es ein wenig einfacher zu machen, für diejenigen, die Wamp verwenden, können Sie Fehler deaktivieren, indem Sie auf PHP> PHP-Einstellungen >> Anzeigefehler klicken. Wenn es aktiviert ist, deaktivieren Sie es.
Hemang Rami
9

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);
}
MN Islam Shihan
quelle
8

In php.ini set:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
MSS
quelle
4

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

Nicola Peluchetti
quelle
Dies ist wirklich nützlich. Ich hatte den Debug-Modus für eine Wordpress-Installation aktiviert und wusste nicht, dass dies der Fall war. Danke für die Auskunft!
Tim
2

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);
Jay
quelle