terug naar    Techniek    Sidesteps

 

Schrijfwijzer ; parse the error


PHP is een script taal.
En zoals elke taal heeft deze een eigen grammatika.
Een grammatika waar je je erg precies aan houden moet.
Het volgende stuk wil enkele valkuilen wegnemen.

Heb je een fout gemaakt dan krijg je de beruchte parse error fout melding.

Parse error: parse error, expecting `','' or `';'' in fout_melding.php on line 5


Veroorzaakt door het volgende script :

<?php
// Gemaakt voor fout meldingen
// De eerste regel mist de ; aan het eind
echo 'Dit is een eerste regel'
echo 'Dit is een tweede regel';


In dit geval geeft de foutmelding precies aan waar de fout zit en wat de fout is.

Maar dat werkt helaas niet altijd.
De fout kan ook in de voorgaande regels schuilen.



White screen of death (en wat er tegen te doen)


Je scherm is helemaal wit.
je weet dat er ergens een fout is opgetreden.
Maar waar?
Je scherm vertelt het je niet.

Dit kun je aanpassen.
Veelal is een php fout de boosdoener en is de webserver niet ingesteld om de fouten te laten zien.

Als je een eigen test webserver hebt, kun je dit aanpassen door een tweetal waarden in de php.ini aan te passen

error_reporting = E_ALL
display_errors = 1
include("./script_met_fouten.php");


Als je geen toegang hebt tot de php.ini kun je ook bovenin een nieuw script de volgende code zetten.

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("./script_met_fouten.php");

(wel weer weg halen als de fout opgelost is)

Het  script_met_fouten.php  zelf laat niets zien.

Met deze omweg kun je veelal nog iets zien.


Je kunt ook in de webserver's  error.log  kijken als een script crashes met een HTTP 500 response.

De beheer tools van je website ( bv. DirectAdmin ) kun je hiervoor gebruiken.



Hoe los je de fout meldingen op?


Een aantal mogelijkheden worden hieronder genoemd.

  • Kijk op de aangegeven regel van het script met fouten
    • Voor typefouten is dit veelal de plaats om de fouten te doen
    • Lees zorgvuldig de regel en bedenk wat elk symbool doet. ( Visual Stdio Code laat veelal de regel met fout al zien)
  • Net zo vaak dien je ook naar de voorgaande regels te kijken
    • Met name is de missende ; een veel voorkomende boosdoener.
    • Als    { code blocks }   niet correct zijn gesloten of doorgelusd, dien je de code nog verder terug te bekijken.
      Een consequente toegepaste inspringing (   code indentation   ) is hierbij van grote waarde.
  • Kijk naar de syntax kleuren
    • Strings, variabelen en constanten zouden alle verschillende kleuren dienen te hebben.
    • Operatoren zoals    +-*/.   zouden ook overal op dezelfde manier gekleurd dienen te zijn.
      Anders staan ze in de verkeerde context.
    • Zie je een te ver doorlopende kleur in een string dan mis je waarschijnlijk sluitende    "   string beeindiger
    • Zie je een te kort doorlopende kleur in een string dan heb je waarschijnlijk een    "   in de string niet geescaped
    • Zie je meerdere leestekens in dezelfde kleur naast elkaar kun je problemen verwachten.
      De meeste leestekens staan los van elkaar. Dit geld niet altijd voor  ++  ,  --   of haakjes gevolgd door een operator.
  • Verklein lange zinnen tijdelijk
    • Hierbij kun je de fout meer precies lokaliseren.
    • Deel complexe  if statements   op in deel  if statements   .
    • Voeg regel einden toe na:
      • Code welke correct is
      • Code waar je niet zeker van bent
  • Isoleer code
    • Is het probleem niet te isoleren, zet dan blokken code (tijdelijk) in commentaar blokken
  • Gebruik zoeveel mogelijk standaard schrijfwijzes
    •  ? :   is soms te compact om goed te kunnen lezen
    • Dit geldt ook voor  if:/elseif:/endif;
  • Veel voorkomende fouten zijn:
    • Missende punt komma's  ;   als regel eindes
    • Incorrect geplaatste string aanhalingstekens  " of  ' 
    • Vergeten operatoren, vooral de    .   om meerdere strings aan elkaar te koppelen
    • Missende haken    { }  . Tel het aantal. Zijn de aantallen gelijk?
  • Het sneeuwbal effect
    • Het oplossen van een probleem, brengt een volgend probleem naar voren. Je kunt weer van voren af aan beginnen
  • Check je PHP versie
    • Zijn alle constructies toegestaan in jouw versie?
  • Het terugzetten van een backup is ook een mogelijkheid
  • Als je de fout helemaal niet niet kunt achterhalen, herschrijf dan het bewuste gedeelte


Basis voorzorgsmaatregelen



Een paar voorzorgsmaatregelenen kun je van te voren nemen.


Gebruikte bronnen

Ik hoop dat dit stuk nieuwe mogelijkheden schept.

Veel programmeer plezier ermee.


Ubel Jan van Wijhe
vanWijhe.Web

 

Ook van VanWijhe.Web

Responsiveframework.nl