Reactie plaatsen 
 
Waardering:
  • 1 stemmen - gemiddelde waardering is 5
  • 1
  • 2
  • 3
  • 4
  • 5
Succesvol debuggen in PHP
Auteur Bericht
Aries-Belgium Offline
Open Source Promotor

Berichten: 8.654
Lid sinds: 04-2006
Reputatie: 310
Bericht: #1
Succesvol debuggen in PHP
Succesvol debuggen in PHP

Omdat ik op verschillende fora vaak dezelfde vragen zie terugkomen, ga ik een paar simpele tips geven om je probleem zelf op te lossen.

error_reporting(E_ALL)
Bij het debuggen is het belangrijk dat je error_reporting op E_ALL zet zodat je elke foutmelding te zien krijgt. Vaak werkt iets niet zoals verwacht omdat er één of andere fout wordt onderdrukt. Op de "live" versie van je script error_reporting() wel uitschakelen

Niet panikeren
Als iets niet werkt zoals je verwacht of je krijgt een foutmelding. Het belangrijkste is dat je niet gaat panikeren. 80% van alle foutmeldingen hebben een typfout als oorzaak.

Veel voorkomende foutmeldingen
Citaat:Parse error: syntax error, unexpected T_PRINT in /www/sandbox/debug/index.php on line 3
Als je deze foutmelding te zien krijgt, ben je waarschijnlijk iets vergeten of heb je iets teveel getypt. De groene tekst kan wel wat variëren, maar het is vaak een haakje of punt-komma vergeten. Kijk of de aangegeven lijn correct is afgesloten. Als dat zo is, kijk dan naar de haakjes op de aangegeven lijn.

Citaat:Fatal error: Call to undefined function ik_besta_niet() in /www/sandbox/debug/index.php on line 2
Heel simpel, de functie bestaat niet. Als je een functie wil gebruiken van één of andere PHP modules (bvb, de GD Library) kan je testen of de de functie bestaat met function_exists(). Als je deze foutmelding krijgt als je een functie wil aanroepen die in een bestand staat die je include zal waarschijnlijk de include fout zijn maar dan krijg je normaal de volgende foutmelding.

Citaat:Fatal error: Cannot redeclare ik_besta_al() (previously declared in /www/sandbox/debug/index.php:5) in /www/sandbox/debug/index.php on line 10
Een beetje in lijn met de vorige foutmelding. Dit keer is de functie al eens gedeclareerd. Dit gebeurd vaak door het twee keer includen van hetzelfde bestand.

Citaat:Warning: include(ik_besta_niet.php) [function.include]: failed to open stream: No such file or directory in /www/sandbox/debug/index.php on line 2

Warning: include() [function.include]: Failed opening 'ik_besta_niet.php' for inclusion (include_path='.:/usr/share/php5:/usr/share/php') in /www/sandbox/debug/index.php on line 2
Controleer of het bestand bestaat en kijk of je geen typfout gemaakt heb bij de include.

MySQL problemen en foutmeldingen
Citaat:Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'foo'@'localhost' (using password: YES) in /www/sandbox/debug/index.php on line 2
PHP kan niet verbinden met de MySQL server met de opgegeven gegevens. Controleer of alle gegevens kloppen, anders zal je even je provider moeten contacteren.

Alles wat te maken heeft met queries kan je makkelijk debuggen door mysql_error(). Of wel op de volgende manier:
PHP-code:
$query mysql_query("SELECT * FROM tabel") or die(mysql_error()); 
Ofwel zo:
PHP-code:
$query mysql_query("SELECT * FROM tabel");
if((
$errmsg mysql_error())!="")
{
       die(
$errmsg);
       
// of een andere foutafhandeling.


var_dump() is je vriend
Ik zie vaak dat mensen een simpele if-constructie toepassen om te testen of iets werkt of niet. Er is echter een simpelere manier om dit te doen, namelijk de var_dump() functie. Met var_dump() kan je alles dumpen, zowel booleans, als arrays, als objecten. Als je de pagina gaat laden, ga je zien dat alles achter mekaar komt te staan en dat het niet echt duidelijk is. Je kan ofwel de broncode opvragen van de pagina of je de html pre-tags gebruiken om een betere opmaak te verkrijgen:
PHP-code:
print("<pre>");
var_dump($var);
print(
"</pre>"); 

backtrace
Als je echt een gecompliceerde bug hebt, kan je het hele verloop van je script bekijken door debug_backtrace() te gebruiken. Dit zal je een array geven waar duidelijk instaat welke functies je script heeft doorlopen, met welke argumenten enzovoort. PHP5 ook de functie debug_print_backtrace() die meteen de backtrace afdrukt. Zo'n backtrace is erg handig als andere mensen je script of applicatie gebruiken. Je kan het zo inbouwen dat ze meteen een mail kunnen sturen met de backtrace erin.

Taking debugging a step further
Je kan nog een stapje verder gaan in het debuggen van je code door de xdebug extensie te installeren. Check de documentatie voor meer informatie. De xdebug library kan je ook inbouwen in verschillende IDEs zoals phpDesigner en het platform onafhankelijke PHPEclipse

[Afbeelding: 2wqbwas.gif]
"I like my women how I like my toast, hot and consumable with butter"
(Dit bericht is het laatst bewerkt op 03-01-2008 om 21:45:24 door Aries-Belgium.)
31-12-2007 08:10:06
Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Ikke Offline
De enige echte
******

Berichten: 3.123
Lid sinds: 04-2006
Reputatie: 67
Bericht: #2
RE: Succesvol debuggen in PHP
Mooie tutorial. Misschien kun je nog is een voorbeeld geven hoe je een bepaalde fout opspoort ofzo, hoe dat in de praktijk gaat.

Maar verder een hele mooi tutorial. ++

- OOP: Make simple things complex to make complex things simple
- Op deze planeet is stompzinnigheid nu eenmaal overvloediger dan zuurstof.
- The most constant factor of software is change
31-12-2007 12:20:34
Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Jasper Online
Ep2 Admin
******

Berichten: 15.056
Lid sinds: 04-2006
Reputatie: 223
Bericht: #3
RE: Succesvol debuggen in PHP
wow, mooi staaltje werk Aries! Erg cool, bedankt!

Om de zeven minuten denkt de vrouw dat de man alleen maar aan seks denkt.
31-12-2007 12:22:22
De website van deze gebruiker bezoeken Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Neophyte Offline
Senior Member
****

Berichten: 672
Lid sinds: 08-2006
Reputatie: 35
Bericht: #4
RE: Succesvol debuggen in PHP
mooi ik wist dat al :)

ik heb nog wel een toevoeging voor de var_dump gebruike er ook <pre></pre> bij dus in php code

Code:
echo '<pre'> . var_dump($_POST) . '</pre>';

Krijg je mooie opmaak in je browser :)

maar puntje erbij :)

(Dit bericht is het laatst bewerkt op 31-12-2007 om 12:54:11 door Neophyte.)
31-12-2007 12:53:32
Alle berichten van deze gebruiker zoeken Reageren op dit bericht
rickmans Offline
Member
***

Berichten: 63
Lid sinds: 11-2006
Reputatie: 6
Bericht: #5
RE: Succesvol debuggen in PHP
Ik zou deze link er nog aan toe willen voegen: http://www.internetschoon.nl/viewSingleI...Xdebug.htm

Voor als je net iets meer dan debuggen alleen. Plus dat var_dump uitgebreider is door Xdebug vergeleken met de standaard versie.

[Afbeelding: xdebugVar_dump.png]

burningCat
31-12-2007 17:09:14
Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Aries-Belgium Offline
Open Source Promotor

Berichten: 8.654
Lid sinds: 04-2006
Reputatie: 310
Bericht: #6
RE: Succesvol debuggen in PHP
Neophyte schreef:mooi ik wist dat al
Is ook meer bedoeld voor beginnende PHP scripters :D
Neophyte schreef:Krijg je mooie opmaak in je browser
Niet echt omdat var_dump() geen tekst teruggeeft, zal PHP eerst de var_dump afprinten en daarna de lege pre tags. Je kan wel var_export() gebruiken als je de uitvoer wil gebruiken in een functie. Met var_dump doe je het zo:
PHP-code:
print("<pre>");
var_dump($var);
print(
"</pre>"); 
Of je kan ook gewoon de broncode van de pagina opvragen om een duidelijkere opmaak te krijgen.

@rickmans: zal het ook vermelden.

[Afbeelding: 2wqbwas.gif]
"I like my women how I like my toast, hot and consumable with butter"
(Dit bericht is het laatst bewerkt op 02-01-2008 om 05:58:59 door Aries-Belgium.)
02-01-2008 05:45:22
Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Neophyte Offline
Senior Member
****

Berichten: 672
Lid sinds: 08-2006
Reputatie: 35
Bericht: #7
RE: Succesvol debuggen in PHP
idd zo bedoelde ik dat ook

PHP-code:
print("<pre>");
var_dump($var);
print(
"</pre>"); 

Maar bedankt voor je terugkoppeling en toevoeging :)

(Dit bericht is het laatst bewerkt op 02-01-2008 om 19:22:29 door Jasper.)
02-01-2008 19:11:22
Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Flex1986 Offline
De Vrolijkheid Zelve
***

Berichten: 241
Lid sinds: 12-2007
Reputatie: 8
Bericht: #8
RE: Succesvol debuggen in PHP
Ik gebruik zelf al enigetijd phpdesigner als IDE voor php sinds de 2008 versie is daarin xdebug in verwerkt wat het ideaal maakt voor het debuggen van je project.

Hier een link naar de tutorial voor xdebug onder Xampp handig voor je test systeem. ;)
(Dit bericht is het laatst bewerkt op 03-01-2008 om 15:48:03 door Flex1986.)
03-01-2008 15:45:28
De website van deze gebruiker bezoeken Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Aries-Belgium Offline
Open Source Promotor

Berichten: 8.654
Lid sinds: 04-2006
Reputatie: 310
Bericht: #9
RE: Succesvol debuggen in PHP
@Flex1986: bedankt voor je toevoeging. Heb de tutorial samen met een andere tutorial om xdebug te installeren op PHPEclipse (platform onafhankelijk) toegevoegd.

[Afbeelding: 2wqbwas.gif]
"I like my women how I like my toast, hot and consumable with butter"
03-01-2008 21:47:17
Alle berichten van deze gebruiker zoeken Reageren op dit bericht
Reactie plaatsen 


Ga naar locatie:


Contact opnemen | Ep2 | Naar boven | Naar inhoud | Archiefmodus | RSS-syndicatie