Rolf B: Wofür dient $throw->getPrevious() im Handling? Wozu brauch man ellenlangen Backtrace im einfachen Error

Beitrag lesen

Hallo MB,

woher hast Du deinen Code kopiert? Denn mit Handbuchlesen und selberschreiben wäre Dir das vermutlich nicht passiert.

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

errcontext
Der fünfte Parameter errcontext ist optional. Es handelt sich um ein Array, das auf die Stelle der aktiven Symboltabelle zeigt, die den Fehler verursacht hat. Mit anderen Worten: errcontext enthält ein Array mit allen Variablen, die im fehlerauslösenden Bereich existierten. Die benutzerdefinierte Fehlerbehandlung darf den Fehlerkontext nicht verändern.

Wenn Du also den Fehlerkontext $trace nennst, dient das zwar optimal zur Verwirrung der Russen - äh, heutzutage wohl eher Chinesen - aber es nützt weder Dir noch uns wirklich.

Die Lösung ist demnach: es gab bei Dir im fraglichen Moment keine anderen sichtbaren Variablen als die Superglobals.

Ich habe das unter Windows auch mal laufen lassen, als Kommandozeilen-Script, da sieht das Ergebnis so aus (ein paar Zeilenbrüche und etliche Einträge von $_SERVER habe ich gelöscht). Aber das ist vermutlich von php.ini zu php.ini und von Betriebssystem zu Betriebssystem verschieden.

array(5) {
  [0]=>
  int(2)
  [1]=>
  string(16) "Division by zero"
  [2]=>
  string(24) "***\divzero.php"
  [3]=>
  int(10)
  [4]=>
  array(8) {
    ["_GET"]=>array(0) {    }
    ["_POST"]=>array(0) {    }
    ["_COOKIE"]=>array(0) {    }
    ["_FILES"]=>array(0) {   }
    ["argv"]=>array(1) {      
       [0]=>string(24) "***\divzero.php"
    }
    ["argc"]=>int(1)
    ["_SESSION"]=>&array(0) {    }
    ["_SERVER"]=>array(60) {
      ["ALLUSERSPROFILE"]=>string(14) "C:\ProgramData"
      ...
      ["REQUEST_TIME"]=>int(1569258873)
      ["argv"]=>array(1) {
         [0]=>string(24) "***\divzero.php"
      }
      ["argc"]=>int(1)
    }
  }
}

Rolf

--
sumpsi - posui - clusi