make sure the universe was still functioning properly

Also die letzten 3 Stunden hab ich ja mit einem der echt üblen Fehler.
Um ca. 17-18 Uhr hab ich eine neue Version auf dem Webserver hochgeladen.
Des PHP-Script ist ein 890KiB (nicht kB) File – mit ca. 500 Klassen drin. Auf der Entwicklungs-Kiste lief des Script eigentlich ohne Probleme – auf dem Beta-Webserver hochgeladen kommen auf einmal die unmöglichsten Fehlermeldungen – “hier Objekt nicht da” – “dort Endlosloop” . Was eigentlich garnich sein kann – weil Teilweise die Methoden

  1. <?php
  2. class Foo {
  3.     public function bar(Bar $fail) {
  4.         $fail->random();
  5.     }
  6. }
  7. ?>

Mit nem “method called on non-object” abfliegt – wohl gemerkt kein “Argument 1 passed to Foo::bar() must be an object of class Bar“. Jetzt stellt sich natürlich die Frage was da los is – weitere Tests haben dann den Fehler sogar auf “var_dump($this);” mit der Ausgabe “NULL” zurückgeführt.
Sehr toll sind natürlich dann auch Scripte ala:

  1. <?php
  2. class Foo {
  3.     public function bar(Bar $fail) {
  4.         while ( ! $fail->loaded) {        
  5.             $fail->load();
  6.         }
  7.     }
  8. }
  9. ?>

Danke des nicht vorhandenen E_STRICT (jetzt isses wohl zu spät dem Src des noch beizubringen) läuft dies natürlich while …. unendlich (PHP geht einfach mal davon aus wenn $fail Null ist könnte man ja ein Objekt vom Typ stdClass draus machen wenn da jemand ne Eigenschaft von laden will – die dann halt mal NULL ist)

Das Test-Script hier z.b. läuft nach ca. 20 Loops mit dieser Ausgabe auf:

Setting: int(890)
Setting inside: int(890)
now inside: NULL
Getting inside: NULL
Getting: NULL
$this reference fail!

Hier der komplette Quellcode:

  1. <?php
  2.  
  3.  
  4. class foo {
  5.      
  6.     private $integer;
  7.      
  8.     public function set ($i) {
  9.         echo ‘<br>Setting inside: ‘;
  10.         var_dump ($i);
  11.         $this->integer = $i;
  12.         echo ‘<br>now inside: ‘;
  13.         var_dump ($this->integer);
  14.     }
  15.      
  16.     public function get () {
  17.         echo ‘<br>Getting inside: ‘;
  18.         var_dump ($this->integer);
  19.         return $this->integer;
  20.     }
  21. }
  22.  
  23.  
  24. $temp = new foo ();
  25. $random = mt_rand(0,1000);
  26. echo ‘<br>Setting: ‘;
  27. var_dump($random);
  28.  
  29. $temp->set($random);
  30. $get = $temp->get();
  31. if ($get != $random) {
  32.     echo ‘<br>Getting: ‘;
  33.     var_dump($get);
  34.     echo ‘<h1>$this reference fail!</h1>’;
  35.     highlight_file(__FILE__);
  36.     die();
  37. }
  38. ?>
  39. <script>
  40.     window.setTimeout(‘document.location.href="test.php";’, 100);
  41. </script>

Die “große” Datei mit allen Klassen ist auch schon mit der alten ausgetauscht worden – die Klassen einzeln über einen autoloader eingebunden – der lighttpd angehalten usw… Webserver neustarten bringt nur was für n paar Minuten … echt ich hab kein Plan was da los sein soll…. Als würde ein Kobold meine Referenzen durcheinander würfeln oder natürlich der Webserver steht auf Htrae.
Und wieder bin ich beim:

  1. /* This program will only run if the laws of mathematics hold */
  2.     //Oh crap – we are not running in the correct Universe
  3.     assert true;

ps.:
hehe Melodic-Death-Comic-Metal Deadlock – Htraereinhörn

Leave a Reply

Ihr Browser versucht gerade eine Seite aus dem sogenannten Internet auszudrucken.

Das Internet ist ein weltweites Netzwerk von Computern, das den Menschen ganz neue Möglichkeiten der Kommunikation bietet.

Da einige von neuen Dingen nichts verstehen, halten wir es für notwendig, sie davor zu schützen. Dies ist im beidseitigen Interesse, da unnötige Angstzustände bei Ihnen verhindert werden, ebenso wie es uns vor profilierungs- und machtsüchtigen Menschen schützt.

Sollten Sie der Meinung sein, dass Sie diese Internetseite dennoch sehen sollten, so können Sie jederzeit durch normalen Gebrauch eines Internetbrowsers darauf zugreifen. Dazu sind aber minimale Computerkenntnisse erforderlich. Sollten Sie diese nicht haben, vergessen Sie einfach dieses Internet und lassen uns in Ruhe.

Die Umgehung dieser Ausdrucksperre ist nach §95a UrhG verboten.
Quelle: http://www.gesetze-im-internet.de/urhg/__95a.html