PHP Error Handler schlägt nicht an
Sabine
- javascript
- php
Ok, das treibt mich in den Wahnsinn...
Irgendwie hat mein Error Handler nie so angeschlagen wie ich das erwartet habe, habe meinen Code in einer neuen Datei dann auf ein MINIMUM reduziert, immer noch nichts...
fetch('testing_error_handler.php')
.then(response => response.text())
.then(data => {
console.log('Success:', data);
})
.catch(error => {
console.error('Error:', error);
});
und
function customError($errno, $errstr) {
echo "$errstr";
}
set_error_handler("customError", E_USER_WARNING);
if (1 !== 2) {
http_response_code(500);
trigger_error("Fehler: 1 !== 2", E_USER_WARNING);
exit();
}
erzeugt eine 500 (Internal Server Error) Fehler Meldung im Browser, gefolgt von einer SUCCESS Meldung Success: Fehler: 1 !== 2
Das ist tatsächlich mein GESAMTER JavaScript / PHP Code meiner beiden Dateien, alles andere habe ich mittlerweile über Bord geworfen.
Kommt da noch jemand mit?
Danke, Sabine.
Ok, das treibt mich in den Wahnsinn...
Aha. Wir suchen also etwas ganz simples und einfaches.
Vermutlich fehlt es nur daran, dass Du die Fehlermeldung gar nicht absendest:
<?php
error_reporting( E_ALL );
ini_set( 'display_errors', 1 );
#…
Test: Damit klappt es bei mir.
Tipp: Suche solche Fehler systematisch. Hier hätte es ein Blick ins error.log von PHP, sodann ein Test mit curl oder wget „getan“.
Ebenso hätte es
<?php
if (1 !== 2) {
echo 'Fehler: 1 !== 2';
http_response_code(500);
exit;
}
„getan“.
Ebenso hätte es
<?php if (1 !== 2) { echo 'Fehler: 1 !== 2'; http_response_code(500); exit; }
„getan“.
Danke, darauf wird es wohl auch hinauslaufen.
Fehler werfe ich dann eben im Client wenn die Response nicht im Bereich 200 / ok zurückkommt
01_error.php:
<?php
error_reporting( E_ALL );
ini_set( "display_errors", 0 );
function customError( $errno, $errstr ) {
echo "Fehler: $errstr" . PHP_EOL;
}
set_error_handler( 'customError', E_USER_WARNING );
if (1 !== 2) {
http_response_code( 500 );
trigger_error( '1 !== 2', E_USER_WARNING );
exit();
}
Terminal:
~/tmp$ php -S 127.0.0.1:9000 01_error.php
02_error.mjs:
import fetch from 'node-fetch';
fetch('http://127.0.0.1:9000/')
.then(response => response.text())
.then(data => {
console.log('Success:', data);
})
.catch(error => {
console.error('Error:', error);
});
Zweites Terminal:
~/tmp$ node 02_error.js
Ausgabe:
Success: Fehler: 1 !== 2
Da das 'Success:' vom JS, 'Fehler:' von der PHP-Funktion customError()
hinzugefügt wurde ist bewiesen, dass alles läuft wie vorgesehen.
ABER
Was Du da machst sieht aus, wie „von hinten durch die Brust ins Auge.“ Lese doch mal die Seite zu den Exceptions im Handbuch.