Hlášení chyb

Změny konfigurace

Hlášení chyb v PHP 3 bylo založeno na úrovních , představovaných jednoduchou číselnou hodnotou . Hodnoty se sčítaly pro různé úrovně chyb . Obvyklé hodnoty byly 15 pro hlášení všech chyb a varování , 7 pro hlášení všeho kromě informativních zpráv , ohlašujících špatný styl a podobné věci .

PHP 4 větší množinu úrovní chyb a varování a přichází s konfiguračním parserem , který nyní umožňuje k nastavení potřebného chování používat symbolické konstanty .

Úroveň hlášení chyb by měla být nyní nastavována explicitním odebíráním těch úrovní , u kterých které nechceme , aby byly hlášeny ( pomocí logické operace XOR se symbolickou konstantou ) . E_ALL . Zní to komplikovaně ? No , tak řekněme , že chcete hlásit všechny chyby s výjimkou jednoduchých " stylových " varování , která jsou zařazena do kategorie popsané symbolickou konstantou E_NOTICE . Potom do souboru php.ini vložíte : error_reporting = E_ALL ~ ( E_NOTICE ) . Pokud chcete potlačit také všechna varování , přidáte odpovídající konstantu do závorek s použitím binárního operátoru ' |' : error_reporting= E_ALL ~ ( E_NOTICE | E_WARNING ) .

Varování

Používání starých hodnot 7 a 15 pro nastavení hlášení chyb je velmi špatný nápad , protože to potlačuje některé nově přidané třídy chyb včetně syntaktických . To může vést k velmi záhadnému chování , kdy skripty nepracují , aniž by vydaly jakoukoli zprávu o chybě .

Toto v minulosti vedlo k množství nereprodukovatelných bug reportů ( hlášení o chybách v PHP ) , když lidé hlásili problémy s enginem , které nebyli schopni vystopovat . Pravou příčinou byla obvykle chybějící uzavírací závorka ' } ' v souboru připojeném pomocí "require " , a parser je nemohl ohlásit kvůli špatně nakonfigurovanému hlášení chyb .

Takže kontrola nastavení hlášení chyb by měla být první věcí , pokud vaše skripty tiše havarují . Zend engine může být nyní považován za dost vyspělý na to , aby způsoboval takové podivné chování .

Přídavné varovné zprávy

Mnoho existujících kódů v PHP 3 používá jazykové konstrukty , které by měly být považovány za velmi špatný styl psaní , neboť přestože nyní dělají zamýšlené věci , snadno mohou být narušeny změnami jinde . PHP 4 bude vydávat spousty informativních zpráv v takových situacích , kdy se v PHP 3 nic nedělo . Snadnou nápravou je vypnutí zpráv E_NOTICE , ale obvykle je lepší raději opravit kód .

Nejčastějším případem , který bude produkovat takové zprávy , je použití řetězců bez uvozovek jako prvků pole . Jak PHP 3 , tak PHP 4 je budou interpretovat jako řetězce , pokud pod tímto jménem není známo žádné klíčové slovo ani konstanta . Pokud by však nějaká taková konstanta ( někde jinde v kódu ) definována byla , skript může havarovat . Může to přerůst i v bezpečnostní riziko , pokud nějaký útočník předefinuje řetězcové konstanty způsobem , který mu přístupová práva , jež by mít neměl . Takže PHP 4 vás bude nyní varovat , pokud použijete řetězecovou konstantu neuzavřenou do uvozovek , jako například $HTTP_SERVER_VARS[ REQUEST_METHOD ] . Změníte-li to na $HTTP_SERVER_VARS[ 'REQUEST_METHOD' ] , parser se uklidní a výrazně se zlepší styl a bezpečnost vašeho kódu .

Další věcí v PHP 4 je hlášení použití neinicializovaných proměnných a prvků polí .