Tutorials
Errors weergeven/verbergen
In deze tut vertel ik hoe je errors weergeeft, verbergt en je eigen errors maakt
Pagina 1
Inleiding
Iedereen heeft het vast wel eens gezien: een grove error, zoals:
Warning: include(include.php): failed to open stream: No such file or directory in /www/site.nl/index.php on line 2
Tijdens het ontwikkelen van je site kan zo'n error handig zijn, omdat je dan meteen ziet waar de fout zit. Maar als je site eenmaal voor groot publiek te zien is, wil je zo'n error liever niet weergeven: het staat onprofessioneel en kan zelfs onveilig zijn!
In deze tutorial leg ik uit hoe je dit soort errors kunt voorkomen en hoe je zelf een error kunt maken.
Warning: include(include.php): failed to open stream: No such file or directory in /www/site.nl/index.php on line 2
Tijdens het ontwikkelen van je site kan zo'n error handig zijn, omdat je dan meteen ziet waar de fout zit. Maar als je site eenmaal voor groot publiek te zien is, wil je zo'n error liever niet weergeven: het staat onprofessioneel en kan zelfs onveilig zijn!
In deze tutorial leg ik uit hoe je dit soort errors kunt voorkomen en hoe je zelf een error kunt maken.
Pagina 2
Error namen
Je hebt verschillende soorten errors en allemaal hebben ze een eigen naam:
E_ERROR = een fout die ervoor zorgt dat je script niet verder uitgevoerd kan worden.
E_WARNING = een fout, maar je script wordt wel verder uitgevoerd.
E_NOTICE = er zou een fout kunnen zijn, maar dat hoeft niet. Bijvoorbeeld een variabele die niet bestaat (zou een spelfout kunnen zijn).
E_USER_ERROR = hetzelfde als E_ERROR, alleen komt het door trigger_error() (zie verder).
E_USER_WARNING = hetzelfde als E_WARNING, alleen komt het door trigger_error() (zie verder).
E_USER_NOTICE = hetzelfde als E_NOTICE, alleen komt het door trigger_error() (zie verder).
E_ALL = alle errors, warnings en notices, behalve E_STRICT.
E_STRICT = een nieuwe error sinds PHP5. Deze geeft een error als je depriciated methodes en functies gebruikt. Bijvoorbeeld een static functie aanroepen die niet als static is gedefineerd of is_a() gebruiken ipv instanceof.
Dit zijn de meest gebruikte. Er zijn ook nog andere errors, maar die worden bijna nooit gebruikt.
Er zijn ook numerieke waarden voor deze errors, maar die worden afgeraden, omdat die bij nieuwere PHP-versies zouden kunnen veranderen. Deze waarden kan je hier bekijken.
Voor meer info over E_STRICT kan je hier klikken.
E_ERROR = een fout die ervoor zorgt dat je script niet verder uitgevoerd kan worden.
E_WARNING = een fout, maar je script wordt wel verder uitgevoerd.
E_NOTICE = er zou een fout kunnen zijn, maar dat hoeft niet. Bijvoorbeeld een variabele die niet bestaat (zou een spelfout kunnen zijn).
E_USER_ERROR = hetzelfde als E_ERROR, alleen komt het door trigger_error() (zie verder).
E_USER_WARNING = hetzelfde als E_WARNING, alleen komt het door trigger_error() (zie verder).
E_USER_NOTICE = hetzelfde als E_NOTICE, alleen komt het door trigger_error() (zie verder).
E_ALL = alle errors, warnings en notices, behalve E_STRICT.
E_STRICT = een nieuwe error sinds PHP5. Deze geeft een error als je depriciated methodes en functies gebruikt. Bijvoorbeeld een static functie aanroepen die niet als static is gedefineerd of is_a() gebruiken ipv instanceof.
Dit zijn de meest gebruikte. Er zijn ook nog andere errors, maar die worden bijna nooit gebruikt.
Er zijn ook numerieke waarden voor deze errors, maar die worden afgeraden, omdat die bij nieuwere PHP-versies zouden kunnen veranderen. Deze waarden kan je hier bekijken.
Voor meer info over E_STRICT kan je hier klikken.
Pagina 3
Errors laten zien
Met de functie error_reporting() vertel je aan PHP welke errors hij moet laten zien. Je kunt bijvoorbeeld hetvolgende doen:
Je kunt ook zelf een error maken met de functie trigger_error(). Dat kan je bijvoorbeeld zo gebruiken:
Als er geen rijen zijn binnengehaald, krijg je de volgende foutmelding:
Warning: De query is niet uitgevoerd in /www/site.nl/index.php on line 7
<?php
// Alle errors laten zien, behalve E_STRICT
error_reporting(E_ALL);
// Alle errors laten zien, ook E_STRICT
error_reporting(E_ALL | E_STRICT);
// Alle errors laten zien, behalve E_NOTICE
// Standaard waarde in php.ini
error_reporting(E_ALL ^ E_NOTICE);
?>
Je kunt ook zelf een error maken met de functie trigger_error(). Dat kan je bijvoorbeeld zo gebruiken:
<?php
// We gaan een select-query uitvoeren.
// Als er geen waardes worden teruggegeven, laten we een error zien.
$select_query = "SELECT * FROM Users WHERE name = 'Jan'";
$result = mysql_query($select_query);
if (mysql_num_rows($result) == 0) {
trigger_error("Er is geen resultaat uit de database gehaald", E_USER_WARNING);
}
?>
Als er geen rijen zijn binnengehaald, krijg je de volgende foutmelding:
Warning: De query is niet uitgevoerd in /www/site.nl/index.php on line 7
Pagina 4
Je eigen error maken
De errors die PHP geeft, kunnen handig zijn tijdens de ontwikkeling van een script; als je site voor groot publiek te zien is, is het niet erg vriendelijk. Meestal zullen je bezoekers metteen je site verlaten als ze zo'n error zien. Daarom is het handig om zelf een error-functie te maken. Zo'n functie heeft de volgende opbouw:
error_level = de numerieke waarde van het soort error (zie 'Error namen', eerder deze tut).
error_message = het bericht dat wordt weergeven.
error_file = niet verplicht, het bestand waarin de error was.
error_line = niet verplicht, de regel waarin de error was.
error_context = niet verplicht, een array met de variabelen en waardes die gebruikt werden tijdens de error.
Zo'n error-functie zou er bijvoorbeeld zo uit kunnen zien:
Nu moet je alleen nog tegen php zeggen dat deze functie gebruikt moet worden als er een error komt. Dat doe je met de functie set_error_handler(). Bij ons vorige voorbeeld zou dat er dus zo uit komen te zien:
Ik hoop dat jullie wat aan deze tutorial hebben gehad, tips zijn altijd welkom ;)
error_function (error_level, error_message, error_file, error_line, error_context)error_level = de numerieke waarde van het soort error (zie 'Error namen', eerder deze tut).
error_message = het bericht dat wordt weergeven.
error_file = niet verplicht, het bestand waarin de error was.
error_line = niet verplicht, de regel waarin de error was.
error_context = niet verplicht, een array met de variabelen en waardes die gebruikt werden tijdens de error.
Zo'n error-functie zou er bijvoorbeeld zo uit kunnen zien:
<?php
// een error-functie maken
function error_function($err_nr, $err_msg, $err_file, $err_line) {
// Weergeef de file en regel als de gebruiker de webmaster is
if ($_SESSION['gebruiker'] == "webmaster") {
echo "<p class='error'>Error: file ".$err_file.", line ".$err_line."</p>\n";
}
// include een andere pagina bij E_ERROR of E_USER_ERROR
// gebruik de numerieke waarden voor de error
if ($err_nr == E_ERROR OR $err_nr == E_USER_ERROR) {
include "includes/error.php";
}
else { // een andere error
echo "<p class='error'>Er is een fout opgetreden op onze site: ".$err_msg.".<br />\n";
echo "Sorry voor het ongemak.</p>\n";
}
}
?>
Nu moet je alleen nog tegen php zeggen dat deze functie gebruikt moet worden als er een error komt. Dat doe je met de functie set_error_handler(). Bij ons vorige voorbeeld zou dat er dus zo uit komen te zien:
<?php
set_error_handler("error_function");
?>
Ik hoop dat jullie wat aan deze tutorial hebben gehad, tips zijn altijd welkom ;)
Reacties
0