Forum und email

Hlásenie chýb

Konfiguračné zmeny

V PHP 3 bola úroveň hlásenia chýb nastavená ako jednoduchá číselná hodnota vytvorená sčítaním čísel, ktoré súvisia s rôznymi úrovňami chýb. Bežnými hodnotami boli 15 pre hlásenie všetkých chýb a upozornení alebo 7 pre hlásenie všetkého, ako sú varovné správy a podobné veci.

PHP 4 má väčšiu sadu úrovní chýb a upozornení a prichádza s konfiguračným parserom, ktorý dovoľuje použitie symbolických konštánt pre nastavovanie plánovaného správania.

Úroveň hlásenia chýb by sa teraz mala konfigurovať výlučne odobratím úrovní upozornenia, ktoré nechcete, aby generovali chybové hlásenia x-oringovaním zo symbolickej konštanty E_ALL. Znie to zložito? Teda, povedzme, že chcete, aby systém hlásenia chýb hlásil všetko, okrem jednoduchých štýlových upozornení, ktoré sú kategorizované symbolickou konštantou E_NOTICE. Potom vložíte následovné do vášho php.ini: error_reporting = E_ALL & ~ ( E_NOTICE ). Ak chcete tiež zakázať upozornenia, pridajte vhodnú konštantu do zátvoriek binárne alebo pomocou operátora '|': error_reporting= E_ALL & ~ ( E_NOTICE | E_WARNING ).

Warning

Keď upgradujete kód alebo servery z PHP 3 na PHP 4 mali by ste si overiť tieto nastavenia a volania na error_reporting() lebo môžte zkázať oznamovanie nových typov chýb, hlavne E_COMPILE_ERROR. Toto môže viesť k prázdnym dokumentom bez žiadnej spätnej väzby na to, čo sa stalo alebo kde hľadať príčinu problému.

Používanie starých hodnôt 7 a 15 pre nastavovanie hlásenia chýb nie je veľmi dobrý nápad, nakoľko toto odstavuje niektoré novo pridané triedy chýb vrátane chýb analýzy. Toto môže viesť k veľmi divnému správaniu, pretože skript by mohol pracovať bez zobrazovania chybových hlásení.

Toto v minulosti viedlo k veľkému množstvu nereprodukovateľných chybových hlásení, kde ľudia hlásili problémy so skriptovým enginom, ktoré nevedeli vystopovať, keď boli TRUE, príčinou zvyčajne bola chýbajúca '}' vo vyžadovanom súbore, ktorú parser nevedel hlásiť kvôli zlej konfigurácii systému hlásenia chýb.

Takže kontrola nastavenia hlásenia chýb je prvá vec, ktorá by sa mala urobiť vždy, keď sa vaše skripty nečinne zaseknú. Zend Engine sa dnes dá posudzovať ako dostatočne vypracovaný, aby nespôsobil tento druh zláštneho správania.

Dodatočné výstražné hlásenia

Veľa existujúceho PHP 3 kódu využíva jazykové konštrukcie, čo by sa malo posudzovať za nie veľmi dobrý štýl, pretože tento kód, počas určenej úlohy, môže zlyhať kvôli zmenám na iných miestach. PHP 4 vyrába veľa výstražných správ v situáciách, v ktorých PHP 3 nie. Dá sa to jednoducho opraviť vypnutím E_NOTICE správ, ale namiesto toho je lepšie kód opraviť.

Najbežnejší prípad, ktorý bude teraz vyrábať výstražné správy, je použitie reťazcových konštánt bez apostrofov ako indexov polí. PHP 3 a 4 ich bude interpretovať ako reťazce, ak pod takým menom nie sú známe žiadne kľúčové slová alebo konštanty, ale kedykoľvek bola pod takým menom definovaná konštanta, môže sa váš skript kdekoľvek v kóde prerušiť. Toto sa môže dokonca stať nebezpečným rizikom, ak nejaký votrelec predefinuje reťazcové konštanty spôsobom, ktorým mu váš skript dáva prístupové práva, ktoré nemal mať. Takže PHP 4 vás teraz bude varovať vždy, keď použijete reťazcové konštanty bez apostrofov ako napríklad v $_SERVER[REQUEST_METHOD]. Jeho zmena na $_SERVER['REQUEST_METHOD'] 'uteší' parser a významne zlepší štýl a bezpečnosť vášho kódu.

Ďalšia vec, o ktorej vám PHP 4 povie, je použitie neinicializovaných premenných alebo elementov polí.