Hoe zien welke regel PHP een typefout bevat?

Als je PHP schrijft, sluipt er wel eens een gemist haakje of verkeerde puntkomma of verkeerd sluiten van aanhalingstekens in.
Probleem is: als je de error-meldingen aan zet, laat ie nog steeds niks zien. Je krijgt gewoon een blanko pagina geserveerd met zo’n fout.

Hoe kan ik toch uitvinden waar de typefout zit?

Goeie editor gebruiken met syntax highlighting? Of trap ik nu een open deur in?

[quote=computer space url=http://www.onemorething.nl/community/topic/hoe-zien-welke-regel-php-een-typefout-bevat/ time=1381911232]Hoe kan ik toch uitvinden waar de typefout zit?[/quote]Je kunt natuurlijk de code helemaal doorlopen en kijken of die klopt, maar dat is zeker voor lange scripts een klotewerk en hoe dan ook is er grote kans dat je er eerst een heleboel keer gewoon overheen kijkt.

Maar ik dacht dat PHP-foutmeldingen een regelnummer geven? Parse error: parse error, expecting <code>&#039;,&#039;&#039; or</code>';'' in foo.php on line 849en zo?

Kom je er daarmee nog niet uit, dan is één manier om te kijken waar je denkt dat het kan zitten en dan iets te laten printen — wat maakt niet zo uit, maar denk je dat de fout in een variabele zit dan is het een goed idee de waarde daarvan te doen. Komt wat je wilt printen ook in beeld, dat zit de fout in een latere regel.

Gewoon in de laatste regels van de error_log van apache kijken op je webserver!

Goede editor zoals Aptana gebruiken (Een goede editor geeft 90% van de fouten aan) en het php log bij de hand houden om de laatste fouten te vinden.

Als de errors niet worden weergegeven heb je waarschijnlijk de error weergave niet goed aangezet of niet voor elke error. Het is bijvoorbeeld mogelijk dat je in de code iets hebt staan als (helemaal aan het begin van je code)

error_reporting(E_ALL);
ini_set(‘display_errors’, ‘on’);

Maar alsnog niets ziet. Het is namelijk mogelijk dat er in php.ini een instelling aan staat dat de errors niet getoond moeten worden en het aanzetten van de weergave in code geblokkeerd is.

@ matthijn: die regels heb ik staan, en werken, want andere waarschuwingen krijg ik gewoon.
Ik was een $ voor een variabele vergeten. Dat soort dingen levert gewoon een blanco pagina, zonder errors.

Nu gebruik ik vaak de halveer-methode. Steeds minder wegcommenten tot ie het niet meer doet.

Waar zit de PHP log?

Je kan in de log van je web server kijken, dus voor Apache bijvoorbeeld onder /var/log/apache2/error_log. Maar daar komen als het goed is dezelfde meldingen in. Er zijn natuurlijk ook typefouten die niet tot een syntax error leiden maar wel de output van je script verpesten. Die zijn lastiger te vinden. Misschien had je daar last van?

[quote]@ matthijn: die regels heb ik staan, en werken, want andere waarschuwingen krijg ik gewoon.
Ik was een $ voor een variabele vergeten. Dat soort dingen levert gewoon een blanco pagina, zonder errors.[/quote]

Enkel als de instellingen zo staan, met een pagina met de code

<?php

ochIkbenDeDollarVergeten = 30;

?>

En de juiste error instellingen krijg je daar gewoon een error, iets als “undefined ochIkBenDeDollarVergeten” oid.

Waarschijnlijk staat in php.ini display_errors uit. Omdat het PHP bestand niet geparsed kan worden worden dus ook de eerste regels met ini_set en error_reporting niet uitgevoerd. Je kunt het oplossen met een .htaccess in de root:

php_flag display_errors On

Dat is m Blok, bedankt!