Muszę ustawić skrypt PHP na górze, aby wyłączyć raportowanie błędów ze względu na ścisłe standardy.
Czy ktoś może pomóc?
Muszę ustawić skrypt PHP na górze, aby wyłączyć raportowanie błędów ze względu na ścisłe standardy.
Czy ktoś może pomóc?
Odpowiedzi:
Chcesz wyłączyć raportowanie błędów, czy po prostu uniemożliwić użytkownikowi ich wyświetlanie? Zwykle dobrym pomysłem jest rejestrowanie błędów, nawet w witrynie produkcyjnej.
# in your PHP code:
ini_set('display_errors', '0'); # don't show any errors...
error_reporting(E_ALL | E_STRICT); # ...but do log them
Zostaną zapisane w standardowym dzienniku systemowym lub użyj error_log
dyrektywy, aby dokładnie określić, gdzie mają trafiać błędy.
php.ini
pliku, np. Jeśli nie możesz zmodyfikować kodu PHP.
php.ini
lub .htaccess
lub gdzieś w moim kodu PHP.
Bez błędów.
error_reporting(0);
lub po prostu nie surowe
error_reporting(E_ALL ^ E_STRICT);
a jeśli kiedykolwiek zechcesz ponownie wyświetlić wszystkie błędy, użyj
error_reporting(-1);
^
jest dobry tylko do pominięcia jednego rodzaju błędu. Jeśli chcesz wyłączyć dodatkowe typy, powinieneś użyć E_ALL & ~E_DEPRECATED & ~E_STRICT
formatu. A może (E_ALL & ~(E_DEPRECATED | E_STRICT))
format.
ini_set('error_reporting', E_ALL&~E_STRICT);
Wyłącz raportowanie błędów ini_set('error_reporting', E_ALL^E_STRICT);
^
("xor") zamiast & ~
("i nie") jest złym pomysłem ! ^
zależy od założenia, że np. E_STRICT jest częścią E_ALL i zawsze będzie jej częścią. To jest złe, ponieważ E_ALL zmieniło się w przeszłości (E_STRICT nie było przeszłością, ale jest teraz od PHP 5.4). Jeśli założenie zawiedzie pewnego dnia, ^
nie tylko się zepsuje , ale w rzeczywistości zrobi odwrotnie niż powinno: włączy E_STRICT ze względu na sposób działania XOR ( ^
). & ~
jednak zawsze wyłącza E_STRICT, bez względu na aktualną wartość E_ALL. Dlatego & ~
powinien być używany.
Wszystkie powyższe rozwiązania są poprawne. Ale kiedy mówimy o normalnej aplikacji PHP, muszą one być zawarte na każdej stronie, której wymaga. Sposobem na rozwiązanie tego problemu jest przejście .htaccess
do folderu głównego. Tylko po to, żeby ukryć błędy. [Umieść jedną z poniższych linii w pliku]
php_flag display_errors off
Lub
php_value display_errors 0
Następnie, aby ustawić raportowanie błędów
php_value error_reporting 30719
Jeśli zastanawiasz się, skąd 30719
pochodzi ta wartość , E_ALL (32767), E_STRICT (2048) są w rzeczywistości stałymi, które przechowują wartość liczbową i ( 32767 - 2048 = 30719
)
php_admin_value error_reporting
do tego do pracy (w konfiguracji vhost).
Domyślna wartość error_reporting flaga jest E_ALL & ~ E_NOTICE jeśli nie jest ustawiona w pliku php.ini. Ale w niektórych instalacjach (szczególnie instalacjach przeznaczonych dla środowisk programistycznych) ma E_ALL | E_STRICT ustawione jako wartość tej flagi (jest to wartość zalecana podczas programowania ). W niektórych przypadkach, szczególnie gdy będziesz chciał uruchomić niektóre projekty open source, które zostały opracowane przed erą PHP 5.3 i nie zostały jeszcze zaktualizowane przy użyciu najlepszych praktyk zdefiniowanych w PHP 5.3, w swoim środowisku programistycznym prawdopodobnie napotkasz wiadomości, które otrzymujesz. Najlepszym sposobem radzenia sobie w tej sytuacji jest ustawienie tylko E_ALL jako wartości flagi error_reporting , albo wphp.ini lub w kodzie (prawdopodobnie w kontrolerze frontowym, takim jak index.php w katalogu głównym sieci, w następujący sposób:
if(defined('E_STRICT')){
error_reporting(E_ALL);
}
WordPress
Jeśli pracujesz w środowisku wordpress, Wordpress ustawia poziom błędu w pliku wp-include / load.php w function wp_debug_mode()
. Więc musisz zmienić poziom PO wywołaniu tej funkcji (w pliku nie wpisanym do gita, więc jest to tylko programowanie) lub bezpośrednio zmodyfikować error_reporting()
wywołanie
Nie widziałem odpowiedzi, która byłaby czysta i odpowiednia dla oprogramowania gotowego do produkcji, więc oto jest:
/*
* 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
na produkcję. Zauważ, że sugerują wyłączenie ścisłych standardów.