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 mß 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 dß 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φ.