Sabine: PHP Error Handler schlägt nicht an

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.

  1. 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“.

    1. 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

      1. 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.