10.03.09 13:47 Alder: 1 år
PHP og Xdebug
Af: Jesper Winther Kristensen
Dette indlæg handler om, hvordan man konfigurerer php og xdebug, så man kan debugge phpscripter i Eclipse, mens det afvikles på Apache web server.
Konfigureringen forudsætter, at man har en fungerende installation af Apache, php, Eclipse og Java. Selv om den anvendte software også kan køre på Windows -maskiner, er dette eksempel for en maskine, der kører Linux.
Xdebug
Xdebug kan installeres på flere måder.
Man kan enten downloade kildekode og selv forsøge at installere.
I OpenSuse Repositoriet findes Xdebug php5-xdebug-2.0.4-1.3 - Extended PHP debugger. Den kan installeres via Yast2 og er konfigureret til at fungere sammen med den Apache pakke, der følger i openSUSE.
Et overblik over hvordan xdebug er konfigureret fås ved at køre scriptet:
<?php
phpinfo();
?>
Og se på udskriften.
Indstillingerne (Settings) for Xdebug sættes i php.ini.
Der er rigtigt mange parametre i Xdebug. En god angrebsvinkel er derfor kun at aktivere det, der direkte understøtter det man er i gang med.
Her vises en elementær opsætning der kan anvendes i forbindelse med et enkelt step / Break inspicer / kodelinier i Eclipse med en remote debugging på samme maskine (localhost), som apache og PHP scriptet køres og afvikles. Samtidig er informationerne fra Xdebug begrænset til noget relevant og overskueligt.
php.ini
[xdebug]
; Setting for xdebug
Kommentarer anføres under hver setting:
- xdebug.default_enable= On
Dette enabler stacktrace i Xdebug. Dette er den helt centrale funktion i Xdebug, som derfor skal være aktiveret.
- xdebug.max_nesting_level = 100
Dette er en mekanisme der sikrer at det aktuelle script afbrydes, hvis der optræder en uendelig løkke af funktionskald .(infinite recursion protection).
- xdebug.remote_host="localhost"
Fortæller på hvilken host Klienten (her Eclipse) køres. I dette eksempel er det den samme maskine som Apache.
- xdebug.remote_port=9000
Den port som Xdebug bruger til forbindelse med klienten.
- xdebug.remote_handler="dbgp"
Dette er kommunikations-protokol mellem klienten i Eclipse) og Xdebug. Da vi i Eclipse anvender PDT bruges her Protokollen dbgp.
- xdebug.remote_mode="req"
Angiver hvornår en debug session oprettes ”reg” betyder ved start af scriptet.
- xdebug.remote_enable = 1
Fortæller Xdebug at der skal oprettes en forbindelse til en klient.
- xdebug.remote_autostart = 0
Hvis denne er sat til forsøger xdebug at kontakte klienten uden at en HTTP GET/POST variabel er sat. Men da Eclipse klienten anvender denne mekanisme til at tale med xdebug skal denne værdi sættes til 0 (hvis dette er lidt kryptisk, så læs afsnittet om remote debugging på Xdebugs web-side).
- xdebug.extended_info = 1
Får Xdebug til at udveksle extende info med php og tillader dermed at debug klienten (Eclipse) kan vise line og break information, hvilket er netop det der ønskes i denne opsætning.
- xdebug.show_exception_trace = 0
Viser ikke en exception trace. Forhindrer at for megen information vises.
- xdebug.show_local_vars = 0
Forhindrer at der vises alt for megen uoverskuelig information.
- xdebug.dump_once = On
Angiver at alle SuperGlobals (PHP-ting) kun skal vises én gang.
- xdebug.dump_globals = On
Angiver at alle superglobals skal vises, når der optræder en fejl.
- xdebug.dump_undefined = On
Angiver at også ikke-definerede superglobals skal vises, når der optræder en fejl.
- xdebug.dump.REQUEST = *
Angiver at alle data fra super globals vises, når der optræder en fejl.
- xdebug.dump.SERVER = REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT
Angiver hvad der skal dumpes når der optræder en fejl.
Gode Links
Her er angivet en række gode links på webben. Nogle er direkte omtalt i denne artikel. Andre er relevant eller nødvendigt baggrundsmateriale.