Debug SplObjectStorage, ArrayObject und update Xdebug

Unser Thema: SplObjectStorage, ArrayObject debuggen

Hallo,
heute dreht sich alles um die Frage:
"Wie kann man PHP Klassen die von SplObjectStorage oder ArrayObject erben debuggen und dessen Inhalt sehen?"

Mein Problem

In meinem PHP Projekt benutze ich viele Collection Klassen die von ArrayObject erben. (Erklärung: ArrayObject ist eine PHP interne Klasse die es erlaubt Objekte so wie Arrays arbeiten zu lassen. PHP.net).

Dabei ist mir aufgefallen das ich den Inhalt von solchen Collections nicht in PHPStorm debuggen kann. Ich erhielt nur Meldungen wie "can not get property".

Nach kurzer Recherche im Internet fand ich ich dann auch die Ursache des Problems.





Die Ursache

Die Ursache des Problems war eine veraltet Xdebug Version. In meinem Fall war es die Version 2.2.3 welche die Darstellung von solchen Objekten nicht unterstützte.

Die Lösung

Das Problem war also gefunden nun musste es nur noch gelöst werden. Der Fehler in Xdebug wurde in der Version 2.3.3 behoben. Also musste ich nur eine Version installieren die >2.3.3 ist. (Xdebug Bug Ticket)

Xdebug updaten >2.3.3

Um Xdebug zu aktualisieren müssen wir eigentlich nur eine aktuelle Version herunterladen diese kompilieren und aktivieren. Wie das geht erkläre ich euch jetzt.

Xdebug Wizard hilft euch

Um einfach die für euch empfohlene Xdebug Version herauszufinden könnt Ihr den von der Xdebug Homepage bereitgestellten Wizard benutzen. Xdebug Wizard

Dem Wizard müsst Ihr nur den Inhalt eurer PHPInfo übergeben. Dazu einfach eine Datei anlegen (z.B. info.php) mit dem Inhalt:
<?php echo phpinfo(); 
Den Inhalt der Seite kopiert Ihr mit Strg + A (alles Markieren) und Strg + C (kopieren) in das Feld auf der Wizard Seite.

Der Wizard erzeugt euch dann eine Ausgabe mit einer passenden Installationsanleitung für euer System.

Xdebug herunterladen und kompilieren

  • In /tmp Verzeichnis wechseln
    • Befehl: cd /tmp
  • Xdebug herunterladen
    • Befehl: wget http://xdebug.org/files/xdebug-2.4.1.tgz
  • Archiv entpacken
    • Befehl: tar -xvzf xdebug-2.4.1.tgz
  • In entpackte Verzeichnis wechseln
    • Befehl: cd xdebug-2.4.1
  • Build initialisieren
    • Befehl: phpize
  • Konfigurieren
    • Befehl: ./configure
  • Builden
    • Befehl: make
  • Kompiliertes Modul in PHP Ordner kopieren
    • Befehl: cp modules/xdebug.so /usr/lib/php5/20121212
  • Falls nötig Extension Pfad anpassen in der php.ini
    • nano /etc/php5/apache2/php.ini
    • Einfügen: zend_extension = /usr/lib/php5/20121212/xdebug.so
Bei mir war der letzte Schritt nicht nötig da in meiner php.ini nur die Extension per Name "xdebug.so" geladen wird.

Wichtig! Nach den Änderungen PHP/Apache neustarten, damit die Änderungen wirksam werden.

Ergebnis

Eure phpinfo Datei sollte nun die aktuell installierte Version von Xdebug anzeigen. In etwa so:
Nachdem alles geklappt hat könnt Ihr nun ohne Probleme solche ArrayObject Klassen debuggen :)

Falls Ihr Probleme oder Anregungen habt schreibt diese bitte in die Kommentare.

Viel Spass und bis bald.

Pokemon Go - Cheater melden bei Niantic



Ja ich oute mich als Pokemon Go Spieler :D. Aber damit bin ich ja zum Glück nicht alleine hier.

Wahrscheinlich haben die meisten von euch es schon selbst erlebt. Man möchte eine Arena einnehmen aber diese wird von unbesiegbar starken Trainern blockiert. Ja ich rede von diesen Cheatern die die Arenen mit Ihrem hoch gelevelten Charakteren und Pokemon besetzen... (lvl 34-40).

Da Niantec jetzt permanente Banns für solche Spieler vergibt wird es Zeit nicht nur untätig rum zu sitzen sondern diese Spieler zu melden.

Hier noch mal der Link zum Niantec Formular: -> Cheater Melden

Das Formular sollte so aussehen:



Es ist wichtig das Ihr auch Screenshots von den Personen macht und diese im Formular hinzufügt. Screenshots kann man unter Android mit der Tastenkombination "Lautstärke runter" + "Power Button" erstellen.

Ich hoffe das wir gemeinsam etwas gegen diese Cheater und Botter unternehmen können und das das Spiel bald Frei von solchen Leuten ist.

Meinungen und Vorschläge bitte in die Kommentare.