Odpowiedzi:
Naprawdę powinieneś naprawić wszystko, co powoduje ostrzeżenie, ale możesz kontrolować widoczność błędów za pomocą error_reporting()
. Aby pominąć komunikaty ostrzegawcze, możesz użyć czegoś takiego:
error_reporting(E_ERROR | E_PARSE);
E_ALL ^ E_WARNING
, włączenie wszystkich raportów błędów oprócz ostrzeżeń wydaje się lepszym wyborem argumentu error_reporting
.
Możesz umieścić @ przed wywołaniem funkcji, aby ukryć wszystkie komunikaty o błędach.
@yourFunctionHere();
dns_get_record
wyrzucają ostrzeżenia. Twój kod może zrekompensować ostrzeżenie, ale nadal je wyrzuca. Wyłączenie raportowania błędów działa na serwerze produkcyjnym, ale nie na serwerze deweloperskim. W przypadku generowania treści XML ostrzeżenie spowoduje, że przeglądarka nie będzie renderowana, ponieważ serwer wysyła zniekształcony kod XML spowodowany ostrzeżeniem. Czasami chcesz tego podczas programowania, ale nie z powodu czegoś spowodowanego tymczasowym błędem wyszukiwania DNS, który już kompensujesz.
Jeśli nie chcesz wyświetlać ostrzeżeń i błędów, użyj
// Turn off all error reporting
error_reporting(0);
w Core Php, aby ukryć komunikat ostrzegawczy, ustawić raportowanie błędów (0) w górnej części wspólnego pliku dołączania lub pojedynczego pliku.
W Wordpress ukryj Ostrzeżenia i powiadomienia dodaj następujący kod w pliku wp-config.php
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);
Nie do końca odpowiadam na pytanie, ale myślę, że w niektórych sytuacjach jest to lepszy kompromis:
Miałem komunikat ostrzegawczy w wyniku instrukcji printf () w bibliotece innej firmy. Wiedziałem dokładnie, co było przyczyną - tymczasowe obejście, podczas gdy strona trzecia naprawiła swój kod. Zgadzam się, że ostrzeżenia nie powinny być pomijane, ale nie mogłem zademonstrować swojej pracy klientowi, gdy na ekranie pojawia się komunikat ostrzegawczy. Moje rozwiązanie:
printf('<div style="display:none">');
...Third-party stuff here...
printf('</div>');
Ostrzeżenie było nadal w źródle strony jako przypomnienie dla mnie, ale niewidoczne dla klienta.
ob_start()
i ob_end_clean()
zamiast tego. W ten sposób rzeczy nie są nawet wysyłane do przeglądarki (co robi tutaj).
Myślę, że lepszym rozwiązaniem jest konfiguracja .htaccess W ten sposób nie musisz zmieniać kodu aplikacji. Oto wytyczne dla Apache2
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
Możesz wyłączyć ostrzeżenie za pomocą raportowania błędów, ale o wiele lepszym sposobem jest poprawienie skryptu w pierwszej kolejności.
Jeśli nie wiesz jak, edytuj swoje pytanie i pokaż nam odpowiedni wiersz oraz wyświetlone ostrzeżenie.
Odpowiedź już jest u operatora kontroli błędów, ale nie ma wyjaśnienia. Możesz używać @
operatora z każdym wyrażeniem i ukrywa ono błędy (oprócz błędów krytycznych).
@$test['test']; //PHP Notice: Undefined variable: test
@(14/0); // PHP Warning: Division by zero
//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error: Uncaught Error: Call to undefined function customFuntion()
Do debugowania jest to szybka i idealna metoda. Ale nigdy nie powinieneś używać go w wersji produkcyjnej ani na stałe dołączać do swojej lokalnej wersji. Zapewni ci wiele niepotrzebnego podrażnienia.
Zamiast tego należy rozważyć:
1. Ustawienia raportowania błędów wymienione w zaakceptowanej odpowiedzi.
error_reporting(E_ERROR | E_PARSE);
lub z ustawień PHP INI
ini_set('display_errors','Off');
2. Łapanie wyjątków
try {
$var->method();
} catch (Error $e) {
// Handle error
echo $e->getMessage();
}