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. pomocí .htaccess
  4. 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()Level (PHP4)Level (PHP5)Level (PHP5.3)
Vypnout všechna hlášení (implicitní)0000
Zapnout všechna hlášeníE_ALL2047 614330719
Zapnout pouze chyby a varováníE_ERROR | E_WARNING | E_PARSE777
Zapnout všechna hlášení, kromě noticeE_ALL ^ E_NOTICE2039613530711
Všechna hlášení, kromě deprecatedE_ALL ^ E_DEPRECATED--22527

Hodnota level (úroveň) vychází ze součtu hodnot reprezentujících jednotlivé konstanty (E_ERROR, atp.) - viz. manuál PHP. Pro různé verze PHP se některé hodnoty liší, neboť byly do PHP postupně integrovány další konstanty (týká se pouze číselné interpretace). Opět veškeré informace naleznete v manuálu PHP.

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 PHP6 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); //nepouzivejte v PHP4
  
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

(pouze pro PHP 5.3.0 nebo vyšší)

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). Více informací o nastavování PHP pomocí souboru .user.ini naleznete zde.

Příklad kódu v .user.ini:

error_reporting = 22527
display_errors = 1

nebo

error_reporting = E_ALL & ~E_DEPRECATED
display_errors = 1

Nastavení error reporting pomocí .htaccess

(pouze pro PHP 5.2.x nebo nižší)

Změna úrovně uvnitř .htaccess přenastaví vypisování hlášek pro všechny PHP skripty volané uvnitř adresáře (vč. podadresářů). Jako parametr musí být uvedena číselná hodnota udávající požadovaný rozsah hlášek (viz. výše).

Příklad kódu v .htaccess:

<IfModule mod_php5.c>
php_value error_reporting 6143
php_flag display_errors 1
</IfModule>

Zápis chyb do souboru (error log)

(pouze pro PHP 5.3.0 nebo vyšší)

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 by mohl velice rychle nabývat na objemu (zejména při vyšší návštěvnosti) a nečekaně zaplnit přidělenou diskovou kvótu Vaší domény.

Jakékoliv kopírování, publikování nebo šíření obsahu je výslovně zakázáno bez předchozího písemného souhlasu společnosti ONEsolution s.r.o.




ONEbit.cz webhosting