E könyv írásakor a PHP 4 semmilyen hibakeresõ eszközt nem tartalmazott.
A fejlesztõk ígéretet tettek hibakeresõ szolgáltatások beépítésére, például hogy
a verem tartalmát nyomon követhessük, ezért elképzelhetõ, hogy mire e könyv az
Olvasó kezébe kerül, a legfrissebb kiadás már tartalmaz valamilyen fejlettebb hibakeres
õ eszközt. Ebben a fejezetben a kódban rejlõ hibák felderítésének néhány
egyszerû módját mutatjuk be.
Az órában a következõ témákkal foglalkozunk:
A PHP beállításainak lekérdezése
A PHP által automatikusan elérhetõvé tett változók
Hibaüzenetek kiírása naplófájlba
Az adatok nyomon követése a programban
A gyakori hibák felfedezése
Információk a PHP-rõl és adott programokról
Ha egy program nem mûködik megfelelõen, érdemes elõször is a PHP beállításait
megvizsgálnunk. Ezután jöhetnek a PHP által létrehozott és a saját változók, és
ha még mindig nem találjuk a hibát, akkor megvizsgálhatjuk a forráskódot
egy olyan eszközzel, amely színkiemeléssel jelzi a nyelvtani elemeket így hamar
rábukkanhatunk a problémás részre. Ebben a részben két módszert is megvizsgá-
lunk arra, hogyan szerezhetünk információkat a használt PHP-értelmezõrõl és
magáról a futó programról.
A phpinfo()
A phpinfo() függvény az egyik leghasznosabb hibakeresõ eszköz: részletes
információkkal szolgál magáról a PHP-rõl, a kiszolgálói környezetrõl és a futó
program változóiról. A függvénynek nem kell átadnunk semmilyen paramétert és
csak egy logikai értéket ad vissza, viszont egy csinos HTML oldalt küld a böngé-
szõnek. A phpinfo() kimenetét a 22.1. ábrán láthatjuk.
Az oldal tetején a használt PHP-változatról, a webkiszolgáló típusáról, a rendszerr
õl és a szerzõkrõl találunk információkat. A következõ táblázat részletezi a PHP
beállításait ezeket a php.ini fájlban módosíthatjuk. Tegyük fel például, hogy
van egy "felhasznalo" nevû ûrlapmezõnk, de a programban valamilyen okból
nem jön létre a $felhasznalo változó. Vessünk egy pillantást a következõ beáll
ításokra:
track_vars On
register_globals Off
410 22. óra
22.1. ábra
PHP információk
megjelenítése
Már meg is találtuk a probléma forrását. A track_vars hatására a GET változók
a $HTTP_GET_VARS[] tömbben tárolódnak, a POST változók
a $HTTP_POST_VARS[] tömbben, míg a sütik a $HTTP_COOKIE_VARS[]
tömbben. Ez eddig rendben is van, a register_globals kikapcsolása azonban
azt jelenti, hogy a változók nem jönnek létre globális PHP változók formájában.
Alapállapotban mindkét lehetõség engedélyezett. Ebben az esetben két lehetõsé-
günk van. Keressük meg a register_globals bejegyzést a php.ini fájlban
és változtassuk On-ra. Nem tudjuk, merre keressük a php.ini fájlt? Nos,
a phpinfo() táblázataiban errõl is kaphatunk információt. A másik lehetõsé-
günk, hogy a "felhasznalo" mezõ tartalmára a program ne $felhasznalok
ént, hanem $HTTP_POST_VARS["felhasznalo"]-ként hivatkozzunk.
Egy olyan táblát is találnunk kell, amely a felhasználói munkamenetek kezelésére
vonatkozó beállításokat tartalmazza. Ha ez hiányzik, akkor a PHP-változatunkba
nem fordítottuk bele a munkamenetek kezelésének támogatását. A táblázatban
hasznos információkat találunk a munkamenetek kezelését megvalósító kód hibakeres
éséhez. Tegyük fel például, hogy olyan munkameneteket szeretnénk létrehozni,
amelyek bizonyos ideig fennmaradnak. Ha a munkamenet elvész, amikor
a felhasználó bezárja a böngészõ ablakát, és a phpinfo() a következõ beállítást
mutatja:
session.cookie_lifetime 0
már meg is találtuk a probléma forrását. A session.cookie_lifetime értéket
kell átállítanunk a php.ini fájlban, annak megfelelõen, hogy hány másodpercig
szeretnénk fenntartani a munkameneteket.
Ha a php.ini állomány a következõ sort tartalmazza:
session.use_cookies 0
a sütik nem engedélyezettek a munkamenetek kezelése során. Ebben az esetben
az azonosítás során a lekérdezõ karakterláncra kell hagyatkoznunk vagy módosí-
tanunk kell a beállítást a php.ini-ben.
A phpinfo() a webkiszolgálóról is rengeteg hasznos információval szolgál,
különösen akkor, ha Apache fut a gépünkön. Láthatjuk például a programmal
kapcsolatban forgalmazott összes kérés- és válaszfejlécet, illetve a kiszolgáló
környezeti változóit is (például HTTP_REFERER).
Ha a PHP-t adatbázis-támogatással fordítottuk, az erre vonatkozó beállításokat is
láthatjuk, például az alapértelmezett felhasználót, IP címet és kaput.
Hibakeresés 411
22
Az egyik legfontosabb információforrásunk lehet az a tábla, amelyben a PHP által
létrehozott globális változók vannak felsorolva az értékeikkel együtt. Lássunk erre
egy példát. A 22.1. példa egy egyszerû programot tartalmaz, amely létrehoz egy
HTML ûrlapot és beállít egy sütit.
22.1. program A phpinfo() függvény kipróbálása
1: 2: setcookie( "azonosito", "2344353463433",
time()+3600, "/" );
3: ?>
4:
5:
6:
kipróbálása
7:
8:
9:
21:
22:
23:
24: 25: phpinfo();
26: ?>
27:
28:
Ha a Lássuk! gombra kattintunk, a program megkapja a felhasználó által megadott
adatokat és a süti is beállítódik. Ha meghívjuk a phpinfo() függvényt,
látni fogjuk ezeket a változókat a kimenet lényeges részét a 22.2. ábrán láthatjuk.
412 22. óra
Látható, hogy a süti és a $HTTP_GET_VARS változó elérhetõ. Az ûrlap tartalmazott
egy olyan listát is, amelybõl több elemet is kiválaszthattunk a változók között
a teljes tömb megjelenik.
Nagyobb lélegzetû feladatoknál gyakran gondot okoz az ûrlapváltozók és a sütik
nyomon követése, ilyenkor a phpinfo() felbecsülhetetlen segítséget nyújthat.
A forráskód megjelenítése színkiemeléssel
Ha nem találjuk meg a probléma forrását a phpinfo() függvény segítségével,
talán nem is a beállításokkal van baj. Jó ötlet lehet egy újabb pillantást vetni
a forráskódra. A PHP segítségével megtekinthetjük a program forráskódját,
ráadásul a kulcsszavakat, a karakterláncokat, a megjegyzéseket és a HTML kódot
színkiemeléssel is megjeleníthetjük.
Ha Apache kiszolgálót használunk, a beállítófájlhoz (többnyire httpd.conf) kell
hozzáadnunk a következõ sort:
AddType application/x-httpd-php-source .phps
Ezután minden .phps kiterjesztésû fájl színkiemeléssel fog megjelenni a böngé-
szõablakban. Ha nincs jogunk megváltoztatni a kiszolgáló beállítóállományát,
használjuk a show_source() függvényt, amely a paraméterül megadott fájlt
színkiemeléssel jeleníti meg a böngészõablakban.
Hibakeresés 413
22
22.2. ábra
Globális változók
elérése
A 22.2. példaprogram segítségével megtekinthetjük programjaink forráskódját.
22.2. program Dokumentum forrásának megjelenítése
1:
2:
3:
megjelenítése
4:
5:
6: