A hibáknak és figyelmeztetéseknek PHP-ben számos típusa van. Ezek:
Táblázat 16-1. PHP hiba típusok
Érték | Szimbólum | Leírás | Megjegyzés |
---|---|---|---|
1 | E_ERROR | fatális futás-idejű hibák | |
2 | E_WARNING | nem fatális futás-idejű hibák | |
4 | E_PARSE | fordítás-idejű feldolgozási hibák | |
8 | E_NOTICE | futás-idejű figyelmeztetések (a notice a warning-nál gyengébb) | |
16 | E_CORE_ERROR | fatális hibák, amik a PHP elindulásakor lépnek fel | csak a PHP 4-ben |
32 | E_CORE_WARNING | nem fatális hibák figyelmeztetései (warning), amik a PHP elindulásakor lépnek fel | csak a PHP 4-ben |
64 | E_COMPILE_ERROR | fatális fordítás-idejű hibák | csak a PHP 4-ben |
128 | E_COMPILE_WARNING | nem fatális fordítás-idejű figyelmeztetések (warning) | csak a PHP 4-ben |
256 | E_USER_ERROR | felhasználó által generált hibaüzenetek | csak a PHP 4-ben |
512 | E_USER_WARNING | felhasználó által generált figyelmeztetések (warning) | csak a PHP 4-ben |
1024 | E_USER_NOTICE | felhasználó által generált figyelmeztetések (notice) | csak a PHP 4-ben |
E_ALL | az összes fent felsorolt elem | csak a PHP 4-ben |
A fenti értékek (akár a numerikusak, akár a szimbolikusak) arra használhatóak, hogy felépíts egy bitmask-ot, ami megadja, hogy mely hibákat kell jeleznie a PHP-nek. Használhatod bitszintű operátorokat, hogy összeállítsd a fenti elemekből a neked megfelelő értéket, vagy letilts egyes hibákat. Csak a '|', '~', '!', és '&' operátorok használhatóak php.ini fájlban, és semmilyen operátor sem használható a php3.ini fájlban.
PHP 4-ben az alapbeállítású error_reporting érték E_ALL & ~E_NOTICE, ami azt jelenti, hogy minden hiba és figyelmeztetés megjelenik az E_NOTICE-szint kivételével. PHP 3-ban az alapbeállítás (E_ERROR | E_WARNING | E_PARSE), ugyanezt jelenti. Vedd figyelembe, hogy ezek a konstansok nem támogatottak a PHP 3 php3.ini fájljában, ezért az error_reporting beállítás a numerikus 7 érték.
Ezek a beállítások az ini fájl error_reporting direktívájával változtathatóak meg, vagy az Apache httpd.conf fájlban a php_error_reporting (php3_error_reporting PHP 3 esetén) direktívával vagy végül futásidőben egy szkriptben az error_reporting() függvénnyel.
Figyelem |
Ha a kódod vagy a szervered frissíted PHP 3-ról PHP 4-re, jól teszed, ha ellenőrzöd ezeket a beállításokat és az error_reporting() függvényhívásokat, különben akaratlanul kikapcsolod az új hibatípusokat, különösen az E_COMPILE_ERROR-t. Ez üres dokumentumokhoz vezethet, amik nem tartalmaznak semmilyen utalást arra, hogy mi történt, vagy hogy hol kellene keresni a problémát... |
Minden PHP kifejezés írható a "@" előtaggal, ami kikapcsolja a hibajelentést arra a kifejezésre. Ha hiba lép fel a kifejezés kiértékelésekor, és a track_errors szolgáltatás be van kapcsolva, a hibaüzenet megtalálható a $php_errormsg globális változóban.
Megjegyzés: A @ hibakezelő operátor nem kapcsolja ki a szkriptek feldolgozása során előforduló hibák (parse error) jelentését.
Figyelem |
Jelenleg a "@" hibakezelő operátor kikapcsolja azon kritikus hibák jelentését is, amik megállítják a szkript futását. Más problémák mellett, ha egy függvényből érkező hibaüzenetek elnyelésére használod a "@" jelet, meg fog állni a szkript futása, ha nem létezik a megadott függvény, vagy elírtad a nevét. |
Az alábbiakban láthatsz egy példát a PHP hibakezelő képességeire. Definiálunk egy hibakezelő függvényt, ami tárolja a hibákat egy fájlba (XML formátummal) és email-t küld a fejlesztőnek ha a programban kritikus hiba történik.
Hibakezelő és naplózó függvényeket.Lásd még: error_reporting(), error_log(), set_error_handler(), restore_error_handler(), trigger_error(), és user_error().