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:

  1. pomocí funkce error_reporting
  2. pomocí .user.ini
  3. zápisem chyb do souboru

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í:

 

Popiserror_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ě noticeE_ALL ^ E_NOTICE
Všechna hlášení, kromě notice a deprecatedE_ALL ^ E_NOTICE ^ E_DEPRECATED

 

Od verze PHP 5.3.0 byly zavedeny další typy chyb, zejména E_DEPRECATED, prostřednictvím které PHP upozorňuje na zastaralé funkce, 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 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 nastavení zapnuté natrvalo. Soubor  může rychle nabývat na objemu a nečekaně zaplnit FTP kvótu Vaší domény.

Související stránky

Kopírování, publikování nebo šíření obsahu není dovolené bez předchozího písemného souhlasu společnosti ONEsolution s.r.o.