Ankündigung

Einklappen
Keine Ankündigung bisher.

register_shutdown_function

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • register_shutdown_function

    Hallo Leute,

    Ich möchte in meinem Installer für meine Website (DB und so) alle Fehler abfangen und entsprechend reagieren.
    Grund dafür ist, dass die Installation über JQuery immer wieder den nächsten Schritt anstößt und so die Seite nicht neugeladen werden muss und dabei trotzdem eine Nutzer-Interaktion möglich ist.

    Funktioniert soweit, wenn nun aber (wie aktuell in der Entwicklungsphase) dabei Fehler auftreten, passiert einfach nichts mehr, da die Funktion $.getJSON() eben JSON als Rückgabe erwartet...
    Client-Seitig passiert im Fehlerfall einfach nichts.

    Ich versuche nun Fehler abzufangen (eine Datei die nur bei der Installation inkludiert wird):
    Code:
    <?php
    	register_shutdown_function( "fatal_handler" );
    	
    	function fatal_handler() {
    		$errfile = "unknown file";
    		$errstr  = "shutdown";
    		$errno   = E_CORE_ERROR;
    		$errline = 0;
    		
    		$error = error_get_last();
    		echo $error["message"];
    		die();
    		if( $error !== NULL) {
    			$errno   = $error["type"];
    			$errfile = $error["file"];
    			$errline = $error["line"];
    			$errstr  = $error["message"];
    		
    			throw new fatalError("$errno in $errfile on line $errline with message $errstr");
    		}
    	}
    Wenn ich die von JS aufgerufene Seite nun so aufrufe, sehe ich, das der Fatal Error geworfen wird UND der von mir geworfene (Die Fehlerklasse erbt einfach nur von Exception).

    Code:
    Fatal error:  Call to undefined method Database\Connector::install() in C:\xampp\htdocs\cms\core\extension\Database.php on line 225
    Fatal error:  Uncaught exception 'fatalError' with message '1 in C:\xampp\htdocs\cms\core\extension\Database.php on line 225 with message Call to undefined method Database\Connector::install()' in C:\xampp\htdocs\cms\core\extension\FatalHandler.php:21
    Stack trace:
    #0 [internal function]: fatal_handler()
    #1 {main}
      thrown in C:\xampp\htdocs\cms\core\extension\FatalHandler.php on line 21
    Ein TryCatch um die Funktion, welche die Fehlerhafte Funktion aufruft, zeigt keine Wirkung :/


    Was mache ich hier verkehrt?


  • #2
    Du kannst keine Fatal Errors ( E_ERROR ) abfangen nur user defined errors und das auch nur mit einem Error Handler.

    http://php.net/manual/de/function.set-error-handler.php

    Grundsätzlich übersättigt man keine Anwendungen in dem man jedes Worst Case Szenario als Fehlerquelle versucht abzufangen. Du solltest eher darauf setzen dass du nur dinge installierst die vorher ( via unittests ) totgetestet wurden und diese Fehler nicht werfen. Aussondern kannst du bspw. Pakete indem du diese signierst / hashst und via zip oder phar zur Installation bereitstellst.

    Alles andere ist Overengineering und unnötig.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar

    Lädt...
    X