2009-10-29 15 views
49

Otrzymuję oczekiwane powiadomienia i ostrzeżenia i chciałbym je wyłączyć na moim pliku php. Błędy są:Wyłącz ostrzeżenia i błędy na php/mysql

Warning: fsockopen() 

i uwagi są:

Notice: A non well formed numeric value encountered in 

Mam zamiar użyć crona dla tego skryptu php i nie chcą, aby uzyskać jakiekolwiek błędy lub zawiadomień rejestrowane nigdzie.

+4

Jeśli nie chcesz, aby wiadomości e-mail wysyłane przez crona były wysyłane, możesz wskazać na wyjściu '/ dev/null'. Mimo to, błędy są generalnie z jakiegoś powodu - prawdopodobnie chciałbyś wiedzieć, kiedy pęknie skrypt cron! Spróbuj z wdziękiem obsługiwać błędy. – ceejayoz

+0

Gdzieś pokrewny: http://stackoverflow.com/questions/4330494/preventing-warnings-fo-fsockopen – trante

Odpowiedz

137

Kiedy jesteś pewien skrypt jest doskonale pracy, można pozbyć się ostrzeżenia i uwagi jak ta: Umieść tą linię na początku skryptu PHP:

error_reporting(E_ERROR); 

wcześniej, podczas pracy na skrypt, zaleciłbym odpowiednie debugowanie skryptu, aby wszystkie powiadomienia i ostrzeżenia znikały jeden po drugim. Dlatego należy najpierw ustawić go jako gadatliwy jak to możliwe:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

UPDATE: Jak rejestrować błędy zamiast wyświetlania ich Jak sugerowano w komentarzach, lepszym rozwiązaniem jest więc tylko do dziennika błędów w pliku Programista PHP widzi komunikaty o błędach, a nie użytkowników. Możliwą implementacją jest plik .htaccess, przydatny, jeśli nie masz dostępu do pliku php.ini (source).

# 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

Nie rób tego. Tłumienie wszystkich błędów jest okropnym pomysłem. – ceejayoz

+31

mówisz tak, jakby recytowałeś mantrę. W tym konkretnym przypadku użytkowania dokładnie tego chce użytkownik. Gdyby poprosił o system logowania, poprosiłby o to. – pixeline

+4

Zgadzam się zarówno z ceejayoz, jak i pixeline. Jednak error_reporting (0) powinien być ustawiony jako środek bezpieczeństwa w środowiskach produkcyjnych, tak aby krytyczne informacje nie zostały omyłkowo ujawnione złośliwym użytkownikom. Używanie error_reporting (0) do "ignorowania błędów" niesie ze sobą wysokie ryzyko doprowadzenia do złych rzeczy. Wiem, o to prosił autor, ale proponuję przeciw temu. –

2

możesz ustawić typ raportowania błędów, który potrzebujesz w php.ini lub używając funkcji error_reporting() na skrypcie.

18

Dodawaj funkcje za pomocą symbolu "@", aby ukryć pewne błędy, w przeciwieństwie do wyłączania WSZYSTKICH raportów błędów.

Więcej informacji: http://php.net/manual/en/language.operators.errorcontrol.php

PHP obsługuje jeden operator kontroli błędów: na znak (@). Po dodaniu do wyrażenia w PHP wszelkie komunikaty o błędach, które mogą być generowane przez to wyrażenie, będą ignorowane.

@fsockopen();

+0

jest to zwykle lepsze rozwiązanie dla kodu w produkcji, IMHO – billrichards

+1

Może, "* może *", dla jednej funkcji, jednak wypełnianie skryptów z tym jest pytaniem o kłopoty później, gdy * coś * nie działa i twój dziennik błędów jest pusty. Najlepszym sposobem jest ustawienie obudowy/przełącznika, aby umożliwić szybkie włączanie i wyłączanie "wyświetlania" błędów. Następnie na żywo są wyłączone, dev/test może być włączony. Tak czy inaczej, logowanie do pliku dziennika błędów jest (prawie) zawsze zalecane – James

14

Zawsze pokazuj błędów na serwerze testowym. Nigdy nie pokazuj błędów na serwerze produkcyjnym.

Napisz skrypt, aby ustalić, czy strona znajduje się na serwerze lokalnym, testującym lub na żywo, i ustaw stan $ na "lokalny", "testowanie" lub "na żywo". Następnie:

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

Jeśli nie można dostać się do pliku php.ini z jakiegoś powodu, wyłącz błędów na standardowe wyjście (display_errors), w.Plik .htaccess w dowolnym katalogu, dodając następujący wiersz:

php_flag display_errors off

dodatkowo można dodać rejestrowanie błędów do pliku:

php_flag log_errors on

13

PHP odniesienie error_reporting:

// 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

raporty o błędach zostaną wyłączone, ale jego raporty będą przechowywane w pliku dziennika w folderze. jak zatrzymać php, aby tworzyć pliki dziennika? tnx –

+0

@MehdiJ: aby zatrzymać PHP od rejestrowania błędów w ** error_log ** dodaj ten kod 'ini_set ('log_errors', 'off');' –

Powiązane problemy