2009-10-29 18 views
49

Ich bekomme erwartete Hinweise und Warnungen und möchte sie auf meiner PHP-Datei deaktivieren. Fehler sind:Deaktivieren Sie Warnungen und Fehler auf PHP/MySQL

Warning: fsockopen() 

und Hinweise sind:

Notice: A non well formed numeric value encountered in 

ich cron für diese PHP-Skript zu verwenden ist die Planung und will nicht überall protokollierten alle Fehler oder Hinweise zu bekommen.

+4

php_flag display_errors off

zusätzlich können Sie die Fehlerprotokollierung in eine Datei hinzufügen Wenn Sie keine Fehler erhalten möchten, die per Cron an Sie gesendet werden, können Sie die Ausgabe auf '/ dev/null' richten. Dennoch, Fehler sind in der Regel aus einem bestimmten Grund - Sie möchten vermutlich wissen, wann Ihre Cron-Skript bricht! Versuchen Sie, die Fehler elegant zu behandeln. – ceejayoz

+0

Irgendwo verwandt: http://stackoverflow.com/questions/4330494/preventing-warnings-from-fsockopen – trante

Antwort

137

Wenn Sie sicher sind, Ihr Skript perfekt funktioniert, können Sie loswerden Warnung und Hinweise wie diese: Setzen Sie diese Zeile am Anfang Ihrer PHP-Skript:

error_reporting(E_ERROR); 

Davor, wenn die Arbeit an Ihrem Skript, würde ich Ihnen raten, Ihr Skript ordnungsgemäß zu debuggen, so dass alle Benachrichtigung oder Warnung nacheinander verschwinden. So sollten Sie setzen es zunächst so ausführlich wie möglich mit:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

UPDATE: wie Fehler zu protokollieren, anstatt sie anzuzeigen Wie in den Kommentaren vorgeschlagen, die bessere Lösung ist es, Fehler in einer Datei zu protokollieren, so dass nur die PHP-Entwickler sieht die Fehlermeldungen, nicht die Benutzer. Eine mögliche Implementierung ist über die .htaccess-Datei, nützlich, wenn Sie keinen Zugriff auf die php.ini-Datei (source) haben.

# supress php errors 
php_flag display_startup_errors off 
php_flag display_errors off 
php_flag html_errors off 
php_value docref_root 0 
php_value docref_ext 0 
# enable PHP error logging 
php_flag log_errors on 
php_value error_log /home/path/public_html/domain/PHP_errors.log 
# prevent access to PHP error log 
<Files PHP_errors.log> 
Order allow,deny 
Deny from all 
Satisfy All 
</Files> 
+6

Tun Sie dies nicht. Alle Fehler zu unterdrücken ist eine schreckliche Idee. – ceejayoz

+31

Sie sprechen, als rezitiert man ein Mantra. In diesem speziellen Anwendungsfall ist dies genau das, was der Benutzer wünscht. Wenn er nach einem Holzschlagsystem gefragt hätte, würde er danach fragen. – pixeline

+4

Ich stimme sowohl mit ceejayoz als auch mit pixeline überein. Error_reporting (0) sollte jedoch nur als Sicherheitsmaßnahme für Produktionsumgebungen festgelegt werden, damit wichtige Informationen nicht versehentlich an böswillige Benutzer weitergegeben werden. Die Verwendung von error_reporting (0) zum "Ignorieren von Fehlern" birgt ein hohes Risiko, zu schlechten Dingen zu führen. Ich weiß, dass es das ist, wonach der Autor gefragt hat, aber ich würde dagegen vorschlagen. –

2

können Sie die Art des Fehlers festgelegt Sie in php.ini Berichterstattung benötigen oder von error_reporting() auf der Oberseite des Skripts.

18

Stellen Sie Funktionen mit dem '@' - Symbol vor, um bestimmte Fehler zu unterdrücken, im Gegensatz zum Ausschalten aller Fehlermeldungen.

Mehr Info: http://php.net/manual/en/language.operators.errorcontrol.php

PHP unterstützt einen Operator zur Fehlerkontrolle: das At-Zeichen (@). Wenn sie einem Ausdruck in PHP vorangestellt werden, werden alle Fehlermeldungen, die von diesem Ausdruck erzeugt werden könnten, ignoriert.

@fsockopen();

+0

Dies ist normalerweise eine bessere Lösung für Code in der Produktion, IMHO – billrichards

+1

Vielleicht, "* vielleicht *", für eine Funktion, jedoch füllen Ihre Skripte mit dieser Frage nach Problemen später wenn * etwas * nicht funktioniert und Ihr Fehlerprotokoll ist leer. Der beste Weg besteht darin, einen Fall/Schalter so einzustellen, dass Fehler wirklich schnell angezeigt werden können. Dann auf Live sind sie aus, Dev/Test kann eingeschaltet sein. In jedem Fall wird die Protokollierung in die Fehlerprotokolldatei (fast) immer empfohlen – James

14

immer anzeigen Fehler auf dem Testserver. Niemals Fehler auf dem Produktionsserver anzeigen.

Schreiben Sie ein Skript, um festzustellen, ob sich die Seite auf einem lokalen, Test- oder Live-Server befindet, und setzen Sie $ state auf "local", "testing" oder "live". Dann:

if($state == "local" || $state == "testing") 
{ 
ini_set("display_errors", "1"); 
error_reporting(E_ALL & ~E_NOTICE); 
} 
else 
{ 
error_reporting(0); 
} 
2

Wenn Sie aus irgendeinem Grund nicht auf die Datei php.ini erhalten, deaktivieren Sie Fehler auf stdout (display_errors) in einem..htaccess-Datei in einem beliebigen Verzeichnis, indem Sie die folgende Zeile ein:

php_flag log_errors on

13

PHP error_reporting Referenz:

// Turn off all error reporting 
error_reporting(0); 

// Report simple running errors 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 

// Reporting E_NOTICE can be good too (to report uninitialized 
// variables or catch variable name misspellings ...) 
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

// Report all errors except E_NOTICE 
// This is the default value set in php.ini 
error_reporting(E_ALL^E_NOTICE); 

// Report all PHP errors (see changelog) 
error_reporting(E_ALL); 

// Report all PHP errors 
error_reporting(-1); 

// Same as error_reporting(E_ALL); 
ini_set('error_reporting', E_ALL); 
+0

die Fehlerberichte werden deaktiviert, aber seine Berichte werden in einer Protokolldatei in dem Ordner gespeichert. wie man PHP stoppt, um Protokolldateien zu machen? tnx –

+0

@MehdiJ: um zu verhindern, dass PHP Fehler protokolliert in ** error_log ** füge diesen Code hinzu 'ini_set (' log_errors ',' off '); ' –

Verwandte Themen