Mai leckénkben a PHP hibakezelő funkcióival ismerkedhetsz meg, hiszen minden óvatosság ellenére előfordulhat, hogy hiba csúszik a kódba. Megesik, hogy az alkalmazás nem úgy fut, ahogyan kellene, és hiba lép fel.
A hibák kezelése
Aki dolgozik, az hibázik is. A PHP világában viszont nem csak a programozó hibáit értjük ezen. Gyakori hibaokok a következők:
- A szerveren nincs elég tárhely.
- A felhasználó érvénytelen értéket vitt be az űrlap mezőjébe.
- A fájl vagy adatbázis, melyet el szeretnénk érni, nem létezik.
- Az alkalmazásnak nincs engedélye rá, hogy fájlt hozzon létre.
- A szolgáltatás, melyhez az alkalmazásnak hozzá kell férnie, ideiglenesen nem érhető el.
Az ilyen típusú hibákat futásidejű hibáknak nevezzük, mert akkor lépnek fel, amikor a script fut. Fontos megkülönböztetni őket a szintaxishibáktól, melyeket még a script futtatása előtt el kell hárítani.
Egy professzionális alkalmazás képes kell hogy legyen az ilyen futásidejű hibák elegáns kezelésére. Vagyis világosan és precízen kell informálnia a felhasználót a problémáról.
A hibaszintek megértése
Általában amikor egy hiba megakadályozza a script helyes futtatását, a PHP-motor hibát jelez. Minden hibát egy egész szám és egy hozzárendelt állandó jelöl. A következő táblázatban bemutatjuk a leggyakoribb hibaszinteket:
Hibaszint |
Érték |
Leírás |
E_ERROR |
1 |
Egy végzetes futásidejű hiba, mely nem helyreállítható. A script futtatása azonnal leáll. |
E_WARNING |
2 |
Futásidejű figyelmeztetés, mely nem végzetes. A legtöbb hiba ebbe a kategóriába sorolható. A script futtatása nem áll le. |
E_NOTICE |
8 |
Futásidejű értesítés, mely arra utal, hogy a script valami olyannal találkozott, ami lehet hiba is, de ilyen helyzet akkor is előfordulhat, amikor a script normálisan fut. |
E_USER_ERROR |
256 |
Végzetes, felhasználó által okozott hibaüzenet. Olyan, mint az E_ERROR, azzal a különbséggel, hogy ezt a PHP-script a trigger_error() funkció segítségével generálja, nem a PHP-motor segítségével. |
E_USER_WARNING |
512 |
Nem végzetes, felhasználó által okozott figyelmeztető üzenet. Olyan, mint az E_WARNING, azzal a különbséggel, hogy ezt a PHP-script a trigger_error() funkció segítségével generálja, nem a PHP-motor segítségével. |
E_USER_NOTICE |
1024 |
Felhasználó által okozott értesítő üzenet. Olyan, mint az E_NOTICE, azzal a különbséggel, hogy ezt a PHP-script a trigger_error() funkció segítségével generálja, nem a PHP-motor segítségével. |
E_STRICT |
2048 |
Nem egy szigorú értelemben vett hiba, de felugrik minden alkalommal, amikor a PHP olyan kóddal találkozik, amely gondot okozhat vagy inkompatibilitásokat továbbíthat. |
E_ALL |
8191 |
Minden hiba és figyelmeztetés a PHP 5.4.0. előtt, az E_STRICT kivételével. |
A PHP-motor minden alkalommal feldobja a hibát, amikor problémás résszel találkozik a scriptben, de te is készíthetsz olyan hibaüzeneteket, amelyek sokkal inkább felhasználóbarátok. Egy saját hibaüzenettel sokkal kifinomultabb lesz az alkalmazás.
Alapvető hibakezelés a die() funkció segítségével
A magyarázatot egy példával kezdjük — vegyünk egy egyszerű esetet, melyben megpróbálunk megnyitni egy szöveges fájlt, kizárólag olvasásra.
PHP-kód:
<?php
// Megpróbálunk megnyitni egy nem létező fájlt
$file = fopen('sample.txt', 'r');
?>
Ha a fájl nem létezik, ilyen hibaüzenetet kapunk:
Warning: fopen(sample.txt) [function.fopen]: failed to open stream: No such file or directory in C:\wamp\www\project\test.php on line 2
Elég azonban néhány egyszerű lépést követni, hogy a felhasználóink ne ilyen üzenettel találkozzanak — hiszen, valljuk be, egy átlagos netező ebből nem sokat fog érteni.
PHP-kód:
<?php
If(file_exists('sample.txt')){
$file = fopen('sample.txt', 'r');
}
else{
die('Hiba: Az elérni kívánt fájl nem létezik.');
}
?>
Ha lefuttatjuk a fenti scriptet, ezt a hibaüzenetet kapjuk:
Hiba: Az elérni kívánt fájl nem létezik.
Ahogy a példánk is illusztrálja, azzal, hogy egyszerűen ellenőrizzük, létezik-e a fájl, olyan hibaüzenetet generálhatunk, amely sokkal többet mond az átlagos felhasználónak.
A die() funkció a fenti példában arra volt használva, hogy megjelenítse a tetszés szerinti hibaüzenetet és leállítsa az aktuális scriptet, ha a „sample.txt” fájl nem található.
Összegzés:
Mai leckénkben elkezdtük a PHP-hibakezeléssel való ismerkedésünket. Bemutattuk a leggyakoribb hibaokokat, illetve megismerkedhettél a hibaszintekkel és a jelölésükkel is. Ahhoz, hogy olyan hibaüzeneteket tudjunk létrehozni, amelyek a felhasználók számára is világosak és érthetőek, egy egyszerű kódot hívtunk segítségül.
A jövő héten is folytatjuk a témával való ismerkedést — létrehozzuk majd a saját hibakezelő funkciónkat, foglalkozunk a hibák naplózásával, és azt is bemutatjuk, hogyan tudod magad is beindítani a hibákat. Jó gyakorlást!
Nyereményjáték
Rovatunk elsődleges célja, hogy közelebbről is bemutassa a legismertebb webtechnológiákat. Azok között az olvasók között, akik minden héten követik rovatunkat, azaz velünk tanulják a programozás alapjait és kitöltik a feladatsort, a sorozat végén egy laptopot sorsolunk ki.
A játék heti kérdése:
Mit jelent az E_NOTICE hibaszint?
A választ a tanulok@erdsoft.com e-mail-címre kell elküldeni, a tárgysorba pedig a következőt kell beírni: HÉTNAP-TANULOK. Sok szerencsét!
Néhány szó rólunk:
Az ErdSoft (www.erdsoft.com) 2011-ben alakult meg. Csapatunkat a fiatalos lendület, a szakértelem, a folyamatos tanulás és tapasztalatgyűjtés jellemzi. Ügyfeleinknek igyekszünk teljes körű szolgáltatást nyújtani — bátran fordulhatnak hozzánk, legyen szó webfejlesztésről, alkalmazásokról, SEO-optimalizálásról, grafikai tervezésről, marketingről vagy szövegírásról. Csapatunk sikerét mi sem bizonyítja jobban, mint a több száz elkészült weboldal és a számos elégedett ügyfél Szerbiában, Magyarországon és az Egyesült Királyságban.