Archiv für Linux

PHP Remote Debugging mit XDebug

PHP Remote Debugging mit XDebug

Serverseitige Konfiguration

Schritt 1: XDebug installieren

apt-get install php5-xdebug

Schritt 2: php.ini / xdebug.ini editieren
zend_extension      = /usr/lib/php5/20090626/xdebug.so
xdebug.remote_enable = On
xdebug.remote_port   = 9000
xdebug.remote_log    = <Pfad zur log-Datei auf dem Server>
xdebug.remote_host   = <IP auf dem die IDE laufen soll>

Den richtigen Pfad zur zend_extension kann der erzeugten xdebug.ini aus /etc/php5/conf.d/ entnommen werden. Diese Datei lässt sich nun auch mit den oben beschriebenen Einträgen erweitern.

Werden die php.ini’s durch Froxlor pro Seite verwaltet, können die Einstellungen natürlich auch dort vorgenommen werden. Aber denk dran: Froxlor übernimmt die Einstellungen per Cronjob. Ein Server Neustart bringt an der Stelle also nichts, um mal eben schnell die Einstellungen zu testen.

Soll das Remote Debugging nicht nur für einen einzelnen Benutzer zugänglich sein (remote_host), sondern auch für mehrere, benötigt ihr noch folgenden Eintrag in der .ini:

xdebug.remote_connect_back = On

Der remote_host wird dann ignoriert und es werden alle Hosts zugelassen (Achtung: Sicherheit!)

Schritt 3: Port-Freigabe am Router

Etwas das ich sehr gerne vergesse und erst viel zu spät dran denke: Den verdammten Port (hier: 9000/tcp) beim Router freigeben und auf den Rechner mit der IDE weiterzuleiten.

Debugging

Im Browser

Um das Debugging im Browser zu aktivieren, empfiehlt sich ein Plugin/Addon für den jeweilig benutzten Browser zu installieren. Für Firefox z.B. das  Addon „The easiest Xdebug„. Um nun eine Debug-Session zu ermöglichen, muss der kleine grüne Käfer des Addons in der Toolbar angeklickt werden.

In der IDE

In der Toolbar von beispielsweise PhpStorm, befindet sich ein kleiner Telefonhörer, wenn dieser aktiviert wird, oder der längere Weg über Run -> Start Listening for PHP Debug Connections gewählt wird, horcht die IDE auf den eingestellen Port (Standard wieder 9000) und hält an den Breakpoints an, wenn diese über den Browser getriggert werden.

Hilfreiche Quellen

* http://xdebug.org/docs/remote
* http://mimi.kaktusteam.de/blog-posts/2012/01/remote-debugging-mit-phpstorm-und-xdebug/

https://www.youtube.com/watch?v=LUTolQw8K9A

Probleme mit Java Programmen im Vollbildmodus unter Gnome3

Java Programme unter Gnome 3 scheinen Probleme zu haben, wenn sie im Vollbildmodus laufen. Das Problem macht sich so bemerkbar, dass Menüs aller Art nicht mehr richtig bedienbar sind mit der Maus.

Die meisten Programme nerven mich, wenn sie nicht im Vollbildmodus sind. Deswegen ist maximieren auch das Erste, was ich nach dem Starten von einem Programm mache. Aus diesem Grund hat es recht lange gedauert, bis ich rausgefunden hatte, dass das Problem scheinbar nicht an Java liegt. Denn die Probleme treten sowohl mit dem openJDK, als auch mit Oracle Java auf.

Zum Glück laufen die Programme nicht maximiert alle super. Also, wer ebenfalls Probleme hat und bereits stundenlang versucht die Programme mit anderen Javaversionen und anderen Einstellungen zum laufen zu bringen -> einfach mal den Vollbildmodus verlassen.

(Konfiguration: Gnome 3.6.2 / Ubuntu 12.10)

500 Internal Server Error / IO Fehler / http Fehler

Wer solche unschönen Meldungen bei einem Uploadversuch von Bildern/Dateien von WordPress bzw. seinem Browser erhält, der hat evtl. das selbe Problem wie ich hatte. Dateien die größer als ca. 100kB waren, konnten über WordPress nicht hochgeladen werden.

Die meisten Lösungen die ich per Google gefunden habe zielen darauf ab in der .htaccess Datei etwas zu ändern um den Server dazu zu zwingen die Scripte als php5 auszuführen. Auch Änderungen der PHP Einstellungen fand ich häufiger. So z.B. die Anhebung der max. Dateigröße oder der Ausführungszeit.

Leider hat dies bei mir alles nicht geholfen. Zur Lösung brachte mich eigentlich die Anlaufstelle Nummer Eins. Das Log-File des Apache Servers. Warum ich da nicht sofort reingeschaut habe? Habe ich, nur ins Falsche, aber seis drum.

PHP läuft bei mir als  FastCGI  Modul, welches als Default-Wert nur 128kB Anfragen zulässt. Dabei spielt es dann keine Rolle welcher Wert in der PHP.ini zugelassen ist. Beim überschreiten des Wertes kommt es dann zum besagten „500 Internal Server Error“

Die Lösung des Problem ist nun das simple Hinzufügen der folgenden Zeile in die fcgid.conf:

FcgidMaxRequestLen 16777216

Hierbei wird die maximale Anfragenlänge auf 16MB gesetzt.

 

Netbook-Image erstellen mit dd

Mein erster Artikel sollte eigentlich die Installation von Windows 7 und Debian auf meinem neuen Netbook beschreiben. Da das nun aber schon wieder ein Weilchen her ist, steht zu erst ein Image an.

Da mein Netbook kein DVD/CD-Rom Laufwerk besitzt, muss zu erst ein bootfähiger USB-Stick erstellt werden, von dem ein Linux gestartet werden kann. Dies geschieht mit dem Programm UNetbootin, welches eine beliebige ISO-Datei bootfähig auf einen Stick schreiben kann. Ich habe mich dabei für ein Ubuntu CD-Image entschieden, da mein Lenovo x121e bei starten mit Knoppix nur lauter bunter Pixel anzeigt (auf dieses Problem gehe ich in dem Artikel über die Installation ein).

Tastatur-Legende (Englischeslayout):
“ – “ = “ ?ß “
“ _ “ = shift + “ ?ß “
“ / “ = “ -_ “
“ = “ = “ `´ “
“ y “ = “ z “
“ z “ = “ y “
“ | “ = shift + “  ‚#  „

Image erstellen 

Schritt 1: UNetbootin runterladen
Schritt 2: ISO-Datei (Knoppix, Ubuntu, …) runterladen, dies ist auch direkt mit UNetbootin möglich
Schritt 3: ISO-Datei mit UNetbootin auf den USB-Stick schreiben
Schritt 4: Ubuntu/… was auch immer von dem USB-Stick booten
Schritt 5: externe USB-Festplatte anschließen
Schritt 6: „Dash home“ klicken „Terminal“ eintippen und starten (am besten direkt 2 Mal, oder einen weiteren Tab öffnen für später)
Schritt 7: im Terminal „sudo su
Schritt 8.1: mit „sfdisk -l“ schauen welche unsere USB-Festplatte ist
Schritt 8.2: oder mit wem es lieber ist grafisch mit „gparted“ (starten wieder über dash home)… gparted ist auch zu empfehlen, falls noch keine Partition auf der Festplatte extistiert
Schritt 9: Resultate aus 8.1 bzw. 8.2 –> „/dev/sdd1“ ist meine Backup Partition auf der Backupfestplatte „/dev/sdd“, „/dev/sda“ ist meine Systemplatte die zu sichern ist
Schritt 10: mit „mount“ in der Konsole rausfinden ob die Platte schon eingebunden wurde; bei mir liegt sie unter „/media/image_netbook“
Schritt 11: Image erstellen aus der Konsole

# dd if=/dev/sda bs=1k conv=sync,noerror | gzip >/media/image_netbook/image_sda_bs1k_08012012.gz

Zusätzlich wird das Image über gzip umgeleitet, um die Dateigröße zu verringern. Bei meinen drei eigentlich fast leeren Partitionen mit einer Gesamtgröße von 320gb, ist das Image dadurch nur ca. 150gb groß. Allerdings dauert dadurch das Backup auch ein wenig länger. Ich bin mit diesen Einstellungen auf ca. 9-10MB/s gekommen.

Die Optionen sync,noerror bewirken, dass die korrekte Anzahl an Bytes geschrieben wird, wenn es Probleme beim lesen der Quelle gibt (bad blocks).  So wird sichergestellt, dass es zu keiner Verschiebung der Daten kommt. Die nicht lesbaren Stellen werden dabei durch Nullen ersetzt.

Schritt 12: in der anderen Konsole:

# watch -n10 pkill -USR1 -x dd

Dies ermöglicht uns in Konsole 1 alle 10 Sekunden einen kleinen zwischen Bericht zu erhalten. Mit diesen Informationen können wir auch die ungefähre Dauer berechnen, die das Backup in Anspruch nehmen wird.

Ab jetzt heißt es warten……

Image wiederherstellen

Wiederhole Schritt 1 – Schritt 10.

Schritt 11: # gunzip -c /media/ image_netbook/image_sda_bs1k_08012012.gz  | dd of=/dev/sda bs=1k conv=sync,noerror

Quellen:
http://mini.steveellwood.com/backup-and-restore-in-knoppix
http://wiki.ubuntuusers.de/shell/dd
http://www.linuxweblog.com/dd-image
http://www.cgsecurity.org/wiki/Damaged_Hard_Disk