Chybová hlášení PHP - error_reporting
Chybová hlášení PHP jsou na všech webserverech ONEbit.cz implicitně vypnuta, aby v nezávažných případech neobtěžovaly návštěvníky Vašich stránek. V případě výskytu problému v PHP skriptu však doporučujeme chybový výstup zapnout a prověřit. Změnu nastavení lze provést několika způsoby:
Při změně nastavení je nezbytné uvést úroveň (level), jinými slovy - jak závažné chyby mají být zobrazovány. Podrobný popis naleznete v dokumentaci PHP http://cz.php.net/error_reporting. Pro ilustraci uvádíme nejčastější příklady použití:
Popis | error_reporting() |
---|---|
Vypnout všechna hlášení (výchozí) | 0 |
Zapnout všechna hlášení | E_ALL |
Zapnout pouze chyby a varování | E_ERROR | E_WARNING | E_PARSE |
Zapnout všechna hlášení, kromě notice | E_ALL ^ E_NOTICE |
Všechna hlášení, kromě notice a deprecated | E_ALL ^ E_NOTICE ^ E_DEPRECATED |
Chyby E_DEPRECATED pouze varují při použití zastaralé funkce nebo metody, které budou v budoucích verzích PHP zcela odstraněny.
Funkce error_reporting()
Výhodou použitím PHP funkce je především interaktivita - úroveň chyb můžete měnit kdekoliv v průběhu skriptu. To například umožňuje zapnutí chyb pouze v problémové části skriptu nebo podmínit na IP, atp.
Příklad použití:
<?php
ini_set("display_errors", 1);
error_reporting(E_ERROR | E_WARNING);
$a = 5 / 0; //chyba deleni nulou
?>
Výstup skriptu:
Warning: Division by zero in /hosting/www/example.com/www/test.php on line 4
Nevýhoda funkce error_reporting() se ukrývá v nefunkčnosti E_PARSE
- syntaktických chyb. Důvod je prostý - v případě výskytu syntaktické chyby PHP vůbec skript nespustí, a tedy k zavolání funkce error_reporting() ani nedojde. Tento nedostatek řeší globální změna levelu jedním z následujících způsobů.
Nastavení error reporting pomocí .user.ini
Změna úrovně uvnitř .user.ini přenastaví vypisování hlášek pro všechny PHP skripty volané uvnitř adresáře (vč. podadresářů). Jako parametr se uvádí rozsah druhů chyb číselnou hodnotou (viz. výše) nebo pomocí konstant (syntaxe shodná s php.ini).
Příklad kódu v .user.ini
:
error_reporting = E_ALL & ~E_DEPRECATED display_errors = 1
Zápis chyb do souboru (error log)
Tento způsob se využívá v případech, kdy potřebujete zapnout chybový výpis na již veřejně běžících stránkách. Chybové výpisy tak putují do souboru a neobtěžují návštěvníky stránek. Hodit se také může u skriptů, jejichž výstup se nezobrazuje textově uvnitř stránek. Tento způsob zachytí také syntaktické chyby.
Příklad kódu v souboru .user.ini
:
log_errors = 1 error_reporting = E_ALL & ~E_DEPRECATED error_log = /hosting/www/example.com/www/error.log
Absolutní cesta /hosting/www/example.com
udává umístění domény na serveru, následuje název subdomény www
a název souboru error.log
, do kterého bude PHP zapisovat všechny chyby vyskytující se pod doménou www.example.com.
Zvolený level error_reporting
může být za běhu skriptu změněn pomocí funkce error_reporting(), proto překontrolujte případná volání této funkce.
Důležité upozornění
Zápis chyb do souboru používejte pouze dočasně při ladění skriptu - nenechávejte zapnuté trvale. Soubor může rychle nabývat na objemu a nečekaně zaplnit FTP kvótu Vaší domény.