Archiv: PHP

Netbeans, Vagrant und remote PHP Debugging mit xdebug

14 February 2015

Vielleicht hilft dieser Tipp dem einen oder anderen weiter, der gerne die Netbeans IDE zur PHP Entwicklung verwendet und auch Vagrant nutzt: Wenn man mit Vagrant arbeitet, so werden die lokalen Dateien in der virtuellen Maschine gemounted. Für Netbeans konfiguriert man daher "lokalen Webserver" als Umgebung.
Die Konfiguration von xdebug sieht dann am einfachsten so aus: [xdebug]
xdebug.remote_enable = 1
xdebug.remote_connect_back = 1
;xdebug.remote_autostart = 1
xdebug.remote_handler=dbgp
Hier wird xdebug angewiesen, sich zum Aufrufer zurück zu verbinden - die IP wird aus dem Request genommen. Das passt in der Regel, wenn man innerhalb von Vagrant nicht noch wilde Sachen (Proxy) macht.
Was leider nicht passt: Die Pfade. Netbeans weißt xdebug für Breakpoints an, welche Datei - inkl. Pfad - an welcher Stelle einen Breakpoint erhalten soll. Die Ordnerstruktur ist innerhalb der virtuellen Maschine höchstwahrscheinlich anders, als auf dem Host-System.
Hierzu gibt man innerhalb von Netbeans noch ein Pfad-Mapping an: Projekt Konfiguration, "Run Configuration", "Advanced".
Nun waehlt man aus, wo man innerhalb der Vagrant bzw. VirtualBox Umbebung den Projekt Ordner eingebunden hat. In meinem Beispiel ist das /var/www/localhost

Anschließend kann man den Netbeans Debugger verwenden.
Möchte man spezielle Requests, wie z.B. PUT, mittels curl aufrufen kann man dies auch ganz einfach machen, in dem man den Xdebug Trigger als Parameter anhängt: curl -X PUT -d '{}' http://localhost:8080/rest/endpoint.php/duplicates\?XDEBUG_SESSION_START\=netbeans-xdebug

Ein Screenshot der Netbeans Konfiguration als Referenz: path-mapping

PHP: Logging von SQL Queries / PDO Prepared Statements

17 January 2015

Das Debugging von (legacy) PHP Anwendungen kann ganz schoen nervig sein. Da hilft auch der ganze Werkzeugkasten nicht, den man aus anderen Umgebungen gewohnt ist.

Percona Toolkit pt-query-digest auf tcpdump hat mal direkt Probleme bei der Auswertung.

Instrumentierung / AOP von PHP "Anwendungen" - eher mau. Das einzige was einigermaßen tut, ist 'runkit'. Jedoch kann das nicht alles, was man gerne möchte. Insbesondere kann man sich damit nicht an die Konstruktoren von PHP internen Klassen (PDO) anhängen. Damit war der Plan vollständig ohne PHP Code Änderungen auszukommen erst mal dahin.

Aber erst mal die guten Nachrichten: Verwendet man runkit, kann man von mysql_query bzw. mysqli_query schonmal alles mitlesen.

PHP runkit ist schnell aus dem git repo (PECL ist veraltet) installiert: cd /tmp
git clone git://github.com/zenovich/runkit.git
cd runkit
pecl install package.xml
echo 'extension=runkit.so' >> /etc/php5/fpm/conf.d/20-runkit.ini
echo 'runkit.internal_override = true' >> /etc/php5/fpm/conf.d/20-runkit.ini
echo 'opcache.enable = 0' >> /etc/php5/fpm/conf.d/20-runkit.ini
php5-fpm restart

Danach hängt man ein bisschen Magie in den PHP code und alle mysqli_query Aufrufe werden abgefangen:


if (function_exists("runkit_function_redefine"))
{

  //clean up from cached versions
  if (function_exists('__mysqli_query'))
  {
    runkit_function_remove('__mysqli_query');
  }

  $myqsliDelegate = 'file_put_contents("/tmp/queries.txt", $sql. ";\n", FILE_APPEND); return __mysqli_query($db, $sql);';

  runkit_function_rename('mysqli_query', '__mysqli_query');
  runkit_function_add('mysqli_query', '$db, $sql', $myqsliDelegate);
}

Jetzt kommt noch PDO, auch hier hätte man ja gerne die Prepared-Statements. Hier ist die Besonderheit dass erst die Datenbank die prepared sql statements mit Parametern belebt.
Dazu kann man sich dieser Klasse bedienen: https://github.com/noahheck/E_PDOStatement - die Interpolierung wird dann simuliert.
In meinen Fällen reichte das voll und ganz.
So sieht dann der runkit code für das Logging der PDO Statements mit der Hilfsklasse E_PDOStatement aus, die mir im Property fullQuery die interpolierte Query bereitstellt:


   $pdoDelegate = '$res = $this->__execute(); $query = $this->fullQuery; file_put_contents("/tmp/queries.txt", $query. "; --\n", FILE_APPEND); return $res;';
   runkit_method_rename("E_PDOStatement", "execute", '__execute');
   runkit_method_add("E_PDOStatement", "execute", '',  $pdoDelegate);


Leider muss jetzt noch an den Stellen, an denen das PDO instantiiert wird das E_PDOStatement konfiguriert werden. Normalerweise ist die Anzahl aber überschaubar. Damit nur auf Entwicklerrechnern das Logging aktiviert wird, habe ich noch einen environemnt Check dazu gepackt:

  if ((getenv("environment") === "LOCAL"))
  {
     require_once("lib/E_PDOStatement.php");
     $con->setAttribute(PDO::ATTR_STATEMENT_CLASS, array("E_PDOStatement", array($con)));
  }

Netbeans + git = merge commit bei pull?

16 March 2013

Netbeans unterstützt derzeit keine interaktive Auswahl der Optionen "merge commit" oder "rebase" wenn bei einem git pull kein fast-forward möglich ist. Dazu gibt es diesen Netbeans bug: http://netbeans.org/bugzilla/show_bug.cgi?id=213855

Als kleiner Work-Around ist es jedoch mit git Bordmitteln möglich, das Default-Verhalten von git selbst anzupassen. Dazu kann man auf einem Branch das Verhalten konfigurieren, z.B. dem master branch: git config branch.master.rebase true

Ich hoffe dieser kleine Netbeans Tipp hilft auch anderen Usern :)

Oracle veröffentlicht Netbeans 6.9

16 June 2010

Netbeans ist nun in der Version 6.9 von Oracle freigegeben worden. Die Entwicklungsumgebung für Java, PHP, JavaScript, Groovy, Scala, ... wird von Oracle zusammen mit der OpenSource Community entwickelt. Das nun veröffentlichte Netbeans 6.9 enthält viele Neuerungen. Für PHP Entwickler besonders interessant ist die Unterstützung des Zend Framework in der aktuellen Version.

PHP: gd-png: fatal libpng error: Read Error: truncated data

17 May 2010

Gerade zum Bloggen von Webseiten-Screenshots bietet sich diese Firefox Extension an: Screengrab. Bisher hat das auch alles prima geklabbt: Ubuntu, Firefox, Wordpress Blog und Ubuntu Server.

Neuerdings gibts da jedoch ein Problemchen: Beim Hochladen der Bilder ins Wordpress gibt es nur das "broken Image" Symbol, und auf dem Server wird ganz viel dieser Art geloggt: gd-png:  fatal libpng error: Read Error: truncated data
gd-png error: setjmp returns error condition 2gd-png:  fatal libpng error: Read Error: truncated data
gd-png error: setjmp returns error condition 2gd-png:  fatal libpng error: Read Error: truncated data
gd-png error: setjmp returns error condition 2
Die defekten Zeilenvorschübe kommen dabei original so aus dem Logfile. Ich habe zwar nach der Fehlermeldung ein wenig gesucht, konnte jedoch lediglich einen Hinweis finden, dass es auf aktuelleren PHP Versionen (z.B. Ubuntu Lucid) evtl. zu Problemen mit der Kompressionsstufe 10 kommen kann.

Skipfish und Ubuntu

21 March 2010

Google hat mit dem Skipfish Projekt ein Sicherheitstool veröffentlicht, mit dem Webanwendungen auf ihre Sicherheit - oder auch Sicherheitslücken untersucht werden können.

Das in C++ Programm unterstützt Windows, Apple Mac OS X und Ubuntu als Betriebssysteme und - wie für Google üblich - wird die besonderes hohe Performanz als Feature genannt. Im folgenden gehe ich kurz die Schritte durch, Skipfish unter Ubuntu Linux zu betreiben.

PDF Erstellung mit PHP und dem Zend Framework

21 August 2009

Das Zend Framework bietet Komponenten für so ziemlich jede Aufgabe, die man als PHP Entwickler vorfinden kann. Doch einen Haken hat das Zend Framework - durch eine sehr individuelle Auslegung von "loose coupling" steht man vor der Herausforderung die verschiedenen Komponenten zu integrieren. Nachdem ich von einem Freund gebeten wurde, mal ein Beispiel zu liefern, wie Zend_PDF verwendet werden kann, um mittels PHP und dem Zend Framework PDF Dateien auszugeben, findet sich nun hier ein entsprechendes Beispiel.

Als Vorlage PDF Datei wurde dabei mittels OpenOffice ein PDF erstellt, um zu demonstrieren, wie sich mittels Zend_PDF auch Vorlagen verwenden lassen. Dafür wurde bisher oft FPDF bzw. PDFi als PHP Bibliotheken verwendet. All diese PDF Funktionalität für PHP wird nun mittels der Zend_PDF Komponente abgebildet.

Netbeans: Copy support failed. Continue?

7 August 2009

Netbeans ist eine herausragende IDE - herausragend durch einfache Bedienbarkeit, gleichzeitig gibt es eine Fülle von Features für den gestressten Entwickler. Und der Preis: Kostenlos! Ob für Java oder PHP Entwicklung, ich möchte Netbeans nicht mehr missen. Besonders für PHP - haben mir die kleinen Tipps und Hinweise doch schon einiges an Nerven gespart. Nicht zu vergessen die erstaunlich gut funktionierende Code-Completion. (Hätte ich bei PHP nie für möglich gehalten.)

Doch es gibt eine Sache, die mich unter Ubuntu in den absoluten Wahnsinn getrieben hat: Ich habe zwei Ubuntu Rechner, einen Server und meinen Arbeitsplatz. Auf dem Server läuft Apache und Mysql - auf meiner Arbeitsstation möchte ich keinen Apache laufen lassen, so dass ich alle Dateien auf den Server lade.

Chromium Browser: Schneller Entwickeln!

1 August 2009

Welche IDE man bevorzugt, darüber kann man sicherlich vortrefflich streiten. Genauso übrigens auch über Webbrowser. Doch eins ist klar: Bei der Entwicklung zählt jede gesparte Sekunde. Gerade in Webanwendungen wird man nicht um manuelles Testen und Ausprobieren herumkommen. Ich habe gemerkt, dass man mit dem Firefox (Firebug, Webdeveloper Toolbar, etc. pp) wunderbar Debugging betreiben kann. Das Tooling ist in meinen Augen ungeschlagen.

PHP FastCGI Path Bug (Ubuntu Hardy)

4 May 2009

Ubuntu Hardy Heron ist derzeit das aktuelle LTS Release von Ubuntu, also ein gutes Argument Hardy für Server einzusetzen. Doch es gibt auch Gründe zu wechseln, wie mir sehr schmerzhaft vor Augen geführt wurde.

Zur Konstellation: PHP wird auf dem betreffenden Server mittels FastCGI Protokoll (fcgid) betrieben. Damit auch suexec zum Zuge kommt, wird der PHP Interpreter über ein kleines Wrapper-Script gestartet. Dies führt dazu, dass in der Umgebungsvariable SCRIPT_NAME nur der Wrapper steht - normalerweise. Dankenswerterweise wird das von PHP erkannt und irgendwie umgeschrieben, so dass hier der tatsächliche (erwartete) Wert steht. Ebenfalls sollte PATH_INFO nur noch den nach dem Script folgenden Anhang aufweisen, so dass man hier bei Bedarf Parameterübergabe (z.B. für "REST") abwickeln kann.

Leider tut das mit PHP 5.2.4 (genauer: PHP 5.2.4-2ubuntu5.6 ) nicht wie erwartet. PATH_INFO ist leer, SCRIPT_NAME enthält bei bestimmten Bedingungen unsinnge Daten.

PHP remote exploits

27 January 2009

PHP remote exploits, wie z.B. der für phpraider sind offenbar ziemlich verbreitet - denn allein auf dies Blog prasseln haufenweise entsprechende HTTP Anfragen ein. Die Ursache dabei ist in meinen Augen viel weniger die Programmiersprache "PHP", als der verantwortungslose Umgang mit "Scripten", Webspace und dedizierten Servern.

Schulden sind ok.

25 January 2009

Schulden sind manchmal ok. Auch wenn gerade Finanzkrise und Pleiten die Welt zeichnen, geht es mir jedoch nicht um das Thema Geld Schulden (da gibt es haufenweise Wege um schulden frei zu werden, oder unter Zuhilfenahme eines Schuldenberaters raus aus den Geld Schulden zu kommen), es geht um Software-Schulden.
Ähnlich wie bei Geld, dass man sich per Kredit leiht, gibt es auch bei der Softwareentwicklung Momente, in denen Schulden aufgenommen werden. Und auch hier werden Zinsen fällig.

Drupal: Content/Seiten intern verlinken

19 January 2009

drupal logoDrupal ist ein sehr modulares und anpassungsfähiges CMS. Im Grunde "lebt" Drupal von Erweiterungen und Modulen, denn der Drupal Core ist eher als Infrastruktur zu verstehen, und als web CMS noch nicht produktiv einsetzbar. Der Vorteil dieser Vorgehensweise bei Drupal ist ganz klar, dass man sich das eigene CMS wie mit einem Baukasten zusammenstellen kann. Mit den damit verbundenen Nachteilen: Es gilt sich zu informieren und einzuarbeiten.

Netbeans: Datei Extension umbenennen? Nein.

29 December 2008

nb-logo2Frage: Wie kann ich in netbeans eine Datei mit Extension umbennen? (z.B. foo.inc nach foo.jsp)

Antwort: Wir verstehen dass dir das wichtig ist... derzeit bieten wir an, dass du Dateien ohne Änderung der Extension umbenennen kannst, oder die Datei außerhalb von Netbeans, z.B. über den Nautilus Explorer umbenennst.

Der zugehörige Netbeans Bug von 2002 ist Issue 27444. Besonders ärgerlich ist das, wenn es z.B. gilt viele Dateien umzubenennen, was bei *.php5 -> *.php ja mal vorkommt.
Und ich bin sicher nicht der einzige, der Netbeans so benutzen soll: http://forums.netbeans.org/topic6082.html

Netbeans 6.5 released

20 November 2008

Die integrierte Entwicklungsumgebung Netbeans ist in Version 6.5 erschienen, einen kompletten Überblick über die Netbeans Features findet sich hier. Neben IntelliJ IDEA und Eclipse hat sich Netbeans zu einem sehr attraktiven, offenen und schnellen Produkt entwickelt, das nicht nur Java Entwicklern zu empfehlen ist.

Gerade die Unterstützung verschiedener Programmiersprachen, von JavaScript über PHP zu Python, Ruby und natürlich Java ist teilweise besser in Netbeans als in Eclipse gelöst. Zusätzliche Features lassen sich als Plugins nachinstallieren, und auch mit "der" (kommerziellen) IDE IntelliJ muss Netbeans den Vergleich keineswegs scheuen. In meinen Augen für Java Desktop Entwickler ist weiterhin der GUI Builder Matisse und als freies UML Tool zum Designen und Reverseengineering das UML Tool von Netbeans wirklich herausragend.

Ajax File upload mit jQuery - ohne DWR

16 November 2008

Ajax ist eine tolle Erfindung - bis auf ein paar "Kleinigkeiten". Z.B. ist nicht vorgesehen einen Dateiupload mittels Ajax zu realisieren. Da muss schon ein echtes Formular her.

Doch wenn dennoch eine Datei im Hintergrund hochgeladen werden soll - also ein "echter" Ajax File upload realisiert werden soll - greift man in die kreative Trickkiste. Die üblichen Verdächtigen für solche Aufgaben sind DWR, jQuery, Dojo. DWR bringt in der Inkarnation 3.0 dann auch Support für Ajax Fileupload, inclusive einem Mapper. Also zurück zu den Basics - was tun, wenn ein XmlHttpRequest nicht da ist? Richtig! Unsichtbares iframe nehmen.

Netbeans 6.5 kommt: RC1

24 October 2008

Netbeans 6.5 kommt - der RC1 wurde gestern veröffentlicht. Schon seit geraumer Zeit arbeite ich gerne mit den nightly builds, die einen stabilen Eindruck machen. Was bringt Netbeans neues, und was hat Netbeans 6.5 auch für nicht-Java Entwickler zu bieten?

Zend Framework 1.6 erschienen

7 September 2008

Das Zend Framework ist in Version 1.6 veröffentlicht worden. Die wohl größte Neuerung ist die enge Integration von Dojo.

Ansonsten gibt es ein paar neue Funktionen, die gesamte Anleitung als PDF und vor allem Fehlerbereinigungen gegenüber dem Zend Framework 1.5:

  • Zend_Tool
  • Lucene 2.3 Index File Format Support
  • Zend_Session save handler for Database Tables
  • Paginator Component
  • Figlet Support
  • ReCaptcha Service
  • Captcha Form Element
  • Zend_Config_Xml Attribute Support
  • Zend_File_Transfer Component
  • File Upload Form Element
  • Zend_Wildfire Component with FireBug Log Writer

Sehr gelungen ist auch die Integration von FirePHP in das Zend Framework, über das Christoph Dorn auch bloggt. Für die Controller gibt es nun Unit Test Unterstützung durch das Zend Framework, und Zend_Tool soll die Projektverwaltung vereinfachen.

Die ersten Bugs ließen nicht lange auf sich warten, für den produktiven Einsatz der neuen Features ist etwas abwarten auf die Version 1.6.1 des Zend Framework wohl zu empfehlen.

PHP Entwicklung: Firebug logging mit PHP

7 September 2008

Egal ob Ajax Entwicklung oder einer klassische Web-Applikation. Während Entwicklung und Test ist es oft sehr hilfreich, wenn man vernünftig loggen kann. Ein interessanter Ansatz dafür ist die Firebug Extension "FirePHP", mit der in die Firebug Console Logging Informationen geschrieben werden können.

Für den produktiven Einsatz vielleicht nicht gewünscht, können doch zu viele Informationen in die falschen Hände fallen, doch für Test und Entwicklung eine echte Hilfe. (Statt in /tmp zu loggen oder von Hand mit den Headern zu spielen)

Homepage von firephp: http://www.firephp.org/

PHP Entwicklung mit Eclipse und xdebug

7 September 2008

PHP Entwicklung ist eine zweischneidige Sache. Zum einen kommt PHP quasi "überall" zum Einsatz, vor allem wenn es um schnelle Entwicklung und günstiges Hosting geht. Doch der Sprache selber sieht man die Entwicklung von einem Pre-Hypertext-Prozessor über eine kleine Scriptsprache bis zur fast schon zu mächtigen Allround-Programmiersprache an. Neben den Sprachkonzepten setzt sich PHP vor allem in der zur Verfügung stehenden Entwicklungsinfrastruktur von anderen Sprachen ab: Außer dem Zend Studio gibt es quasi kein "tooling" zur Entwicklung von PHP Anwendungen. Auch die PHP Frameworks entstehen zunehmend erst in der letzten Zeit.

Apache, fcgid und HTTP Authentifizierung mit PHP

16 August 2008

Gott, ich hasse schlecht dokumentierte Software! Ein echter Krampf sind die FastCGI und fcgid Module. fcgid sollte als (binärkompatibler) Nachfolger in die Fußstapfen des kaum gepflegten FastCGI Moduls treten. Das hat es sicherlich in mehrfacher Hinsicht geschafft: Die fcgid Webseite ist zum fürchten und sieht alles andere als professionell aus. Die Dokumentation ist eher dürftig und sinnvolle Beispiele für aktuelle Anwendungsfälle fehlen. (Rails, PHP, ...)

Netbeans 6.5 Milestone 1 PHP, Groovy, Glassfish und mehr

10 July 2008

Netbeans 6.5 Milestone build 1 ist verfügbar (www.netbeans.org). Die Liste der neuen Features und Updates macht wirklich neugierig!

Unter anderem hat Netbeans verbesserten JavaScript Support (incl. JavaScript Debugger), Groovy und Grails werden von Haus aus unterstützt, und auch PHP ist jetzt direkt mit von der Partie.

Zend Framework: Ein eigener Validator

8 July 2008

Das Zend Framework kommt mit vielen Fertigklassen - sozusagen "batteries included". Jedoch für folgende Konstellation habe ich nichts gefunden: Ein Kontaktformular, das durch Zend Form und Zend Validate unterstützt wird, und bei dem entweder die E-Mail Adresse oder die Telefonnummer mindestens ausgefüllt sein muss. (Und natürlich valide sein muss)

Grund genug, sich mit dem Zend Framework etwas vertrauter zu machen, und einen eigenen Validator zu entwickeln, der genau diese Situation abdeckt.

Wordpress Seiten statisch cachen und Server entlasten

6 July 2008

In den Zeiten vor Wordpress 2.5 gab es das "wp-cache" Plugin. Die Idee: Wenn sich an einer Seite nichts ändert, gibt es eigentlich keinen Grund, die Datenbank zu quälen.

Richtig gedacht! Das Wordpress Cache Plugin war sehr beliebt - doch seit Wordpress 2.5 haben einige User Probleme und Ärger gehabt. (Das lag wohl vor allem an konflikten wer genau für gzip Kompression zuständig sein sollte - kann ich ja auch ein Lied von singen.)

Google Desktop dreht durch

17 June 2008

Google Desktop Suche - auch bekannt als "Mozilla/4.0 (compatible; Google Desktop)" kann wohl ganz schön wild werden, wenn es darum geht, merkwürdige Daten zu verdauen.

PHPRaider phpbb3 Remote Exploit

25 May 2008

PHPraider ist eine Verwaltungs Software für "Raids". Raids sind Schlachten bzw. Raubzüge die im Zuge von World of Warcraft (Wow) häufig stattfinden.

Zur einfachen Koordination gibt es phpraid, auf WoW Clan bzw. Team Seiten wird es gerne mit dem ebenfalls in PHP programmierten phpBB gerne eingesetzt. Offenbar gibt es in genau dieser Konstellation phpraid und phpbb3 eine schwerwiegende Sicherheitslücke: Die Variable pConfig_auth[phpbb_path] kann von außen überschrieben werden.

Netbeans JavaScript Support, PHP und andere Features

19 May 2008

Wer Netbeans 6.1 gerne mit JavaScript und PHP Support testen möchte, der sollte beim Download darauf achten, die richtige Version zu laden ("all").

eAccelerator vs. xcache: Caches für PHP

23 April 2008

Nachdem Dominik ein paar Benchmarks zu verschiedenen opcode Caches für PHP veröffentlich hat, möchte ich auch ein paar Erfahrungen von mir beisteuern.

Ich habe auf verschiedenen (Linux) Servern schon seit langer Zeit (code) Caches für PHP eingesetzt, doch keiner hat bisher so funktioniert, dass ich gut zufrieden war. Die Geschwindigkeit ist dabei weniger das Problem, als die Stabilität.

AMD 64 Java 6 crashes - Workaround und Lösungen

23 April 2008

Bereits seit Wochen Monaten gibt es nun das Problem, dass Java 6 ab Update 4 nicht mehr stabil auf AMD64 Plattformen läuft.

Die JVM crasht - und zieht natürlich die laufende Anwendung, wie z.B. Eclipse unter Java, mit in den Tod. Ein funktionierender Workaround ist tatsächlich den Hotspot Java Optimizer/Compiler zu deaktivieren, dazu ist das Programm/Java mit "-Xint" zu starten. (Bei Eclipse geht das dann so: eclipse -vmargs -Xint)

Wirklich behoben zu sein scheint das Problem mit Java 6 Update 10 - derzeit ist diese Version im beta Stadium. Java 6 U10 wird auch die erste Version mit dem neuen modularen Java Kernel Konzept sein.

Wer das ganze testen möchte, findet auf der Homepage des Java Early Access program den entsprechenden Download von Java 6 Update 10 beta.

Für Ubuntu ist der Austausch folgendermaßen zu bewerkstelligen:

  1. Download der Datei.
  2. Kommandozeile öffnen
  3. bash jdk-6u10-beta-linux-x64.bin
  4. Lizenz (lesen und) bestätigen
  5. in /usr/lib/jvm das ausgepackte Archiv unterbringen
  6. den Link von java-6-sun auf das neue Archiv umbiegen (rm java-6-sun; ln -s jdk1.6.0_10 java-6-sun)

Fertig. Viel Erfolg beim beta testen.

Update:
Sun ist wohl hinter die Ursache gekommen, auch wenn sich der entsprechende Bugreport so ließt als müsse man erstmal Compilerbau gehört haben. Wie so oft gibt es auch nicht nur den einen Bugreport, sondern z.B. auch diesen - aber immerhin es sieht so aus, als sei eine Lösung in Sicht. Und der Bug schon lange - schlummernd - in der Java Codebasis. Update 2:
Eine weitere Lösung stellt die Verwendung der IBM Java VM dar. Die gibt es inzwischen - endlich - auch als Java 6 Version und für 64 Bit Windows/Linux Rechner. Bei IBM ist für den Java Download eine Registrierung erforderlich. Die Nutzungsbedingungen sind u.U. andere als bei Sun. IBM Java Download.

Phpbb3 und mod_gzip - mysteriöse Probleme

20 April 2008

PhpBB3 ist nun schon eine Weile veröffentlicht - und so stellt man das eine oder andere Forum um. Probeläufe werden gemacht, ob eine phpBB2 nach phpBB3 Migration klappt, alle Userdaten und Avatare mitkommen.

Nachdem dann auch das Avatar-Salt richtig gesetzt ist, sieht erstmal alles gut aus. Bis die ersten User des phpBB3 Forum klagen, dass "die Seite langsam" ist. Auch mir selber kamen längere Ladezeiten unter.

Manchmal dauerte es 15 Sekunden bis ein Avatar Bild geladen war - der Rest des phpBB Forums war schnell wie erwartet.

Des Rätsels Lösung fand sich dann dank Stefan:

Nur bei HTTP 1.1 Requests und aktiviertem Keepalive bzw. HTTP Pipelining und nur bei Bildern trat das Problem auf. Schnell war identifiziert, dass die 15 Sekunden genau der maximalen Keepalive Zeit des Apache entsprachen.

Was war nun passiert: Im Apache ist mod_gzip (bzw. DEFLATE) aktiviert. Die Avatare werden von einem PHP Script ausgeliefert und nicht mehr direkt verlinkt. Dabei wird von dem Script auch der Content-Length Header gesetzt - auf die Größe der Bilddatei.

Dann braust das mod_gzip einmal über das Bild und macht es kleiner - und sei es nur ein kleines Byte. Der Content-Length Header wird nicht angepaßt, und der Browser glaubt er müsse noch auf fehlende Bytes warten. Das tut er dann, bis der Timeout erreicht ist.

Lösung dafür war dann diese Zeile in der Apache Config, zumindest als vorläufiger Workaround:

SetEnvIfNoCase Request_URI download/file\\.php$ no-gzip dont-vary

phpMyId und PHP mittels FastCGI

24 March 2008

Das kleine Script phpMyID ist ein OpenID Identity provider für einen einzelnen Benutzer. Vorteil: keine Datenbank, kein Schreibzugriff auf das Dateisystem nötig und es ist schnell einzurichten.
Allerdings hatte ich Probleme, das Script auf einem Server mit PHP über FastCGI zu verwenden, obwohl das FastCGI Modul extra so konfiguriert ist, dass der Authorization Header (Apache 2.2) weitergereicht wird:

FastCgiConfig -pass-header Authorization

Trotzdem funktionierte das Script nicht wie gewünscht:
Missing expected authorization header.

Zend Framework 1.5 für PHP 5 veröffentlicht

17 March 2008

Zend hat das Zend Framework in der Version 1.5 veröffentlicht.
Nachdem der Launch einige Male verschoben wurde, ist jetzt zeitgleich auch eine neue Version der Zend Framework Webseite online. Die Webseite soll dem häufig geäußerten Kritikpunkt Rechnung tragen, dass das Zend Framework für neue Anwender zu wenig auf das optische Erscheinungsbild und Einstiegshilfen Wert gelegt hat.
Dies schlägt sich nun in neuen Quick Start Tutorials und Webcasts nieder, sowie einer "Web 2.0" Optik der Webseite.

PHP Basic Authentication und FastCGI mit Apache2

25 February 2008

PHP, Apache2 und FastCGI bringt neben ein paar Annehmlichkeiten einen Haufen Probleme mit. So funktioniert z.B. die gewohnte WWW-Authenticate "Basic Authentication" nicht mehr wie gewohnt.
Das wird durch verschiedene Faktoren bestimmt:
Das mod_fastcgi muss so konfiguriert werden, dass die entsprechenden Header weitergereicht werden. Bei Apache 1 ist es HTTP_AUTHORIZATION - Apache2 verwendet den standardkonformen "Authorization" HTTP Header.
Dafür sieht dann die FastCGI Konfiguration etwa so aus:

FastCgiConfig -pass-header Authorization -pass-header HTTP_AUTHORIZATION

PHP - zumindest in der aktuellen Version - wertet diesen Header offenbar nicht aus.
Dazu bedarf es dann eines kleines PHP Snippets als Workaround. Oder Zend behebt das Problem mal.

if (isset($_SERVER['Authorization']) && !empty($_SERVER['Authorization']))
{
    list ($type, $cred) = split (" ", $_SERVER['Authorization']);

    if ($type == 'Basic')
   {
        list ($user, $pass) = explode (":", base64_decode($cred));
        $_SERVER['PHP_AUTH_USER'] = $user;
        $_SERVER['PHP_AUTH_PW'] = $pass;
    }

}
Der Rest funktioniert dann wie gewohnt.

phpMyAdmin: blowfish_secret Fehler nach Update

11 February 2008

Es gibt Tage, da fällt man vom Glauben ab: Ubuntu (und Debian) sind in meinen Augen stets bei Updates sehr zuvorkommend gewesen.
Das phpMyAdmin Update hat mich jedoch belehrt, etwas weniger in Ubuntu zu vertrauen, und öfter mal selber aufzupassen.
Nach dem Update konnte ich mich bei phpmyadmin nicht mehr anmelden, einzig die Fehlermeldung "blowfish_secret needed" kam ständig - und auch eine Anpassung der config.inc.php von phpMyAdmin um diese Zeile $cfg['blowfish_secret'] = ''; half leider nicht weiter.
Was dann weiter half - nach einer halben Stunde des Grübelns war diese "nderung: $cfg['blowfish_secret'] = 'foo=true';

Ist auch besser, den Menschen das Denken zu ersparen.

phpbb3 mit php als cgi: malformed header from script

11 February 2008

Wer sein phpbb3 zusammen mit einem PHP das über CGI angesprochen wird betreibt, kann eine oeberraschung erleben: Bilder funktionieren nicht richtig, und in der Logdatei tauchen Einträge der Form

malformed header from script. Bad header=Not Modified: file.php, referer:

auf. Die Lösung: die Zeile

header('Not Modified', true, 304); ist zu ersetzen durch header("HTTP/1.1 304 Not Modified", true, 304); und anschließend klappt es korrekt. Der Hintergrund ist wohl, dass die andere Schreibweise im header Aufruf lediglich mit PHP als Apache Modul funktioniert, weil der Apache die kurz-Notation "Not Modified" unterstützt, und daraus den RFC2616 konformen Header mit Status 304 macht.

Update:
Die korrekte Lösung sollte so aussehen - und das gilt wohl für alle, die vorhaben mit PHP conditional GETs zu unterstützen:

if (php_sapi_name()=='CGI') { header("Status: 304 Not Modified"); } else { header("HTTP/1.0 304 Not Modified"); }

Flow3: Von Typo3 über Zend zu Rails in PHP

9 February 2008

Typo3 ist eines der Content Management Systeme in PHP.
Die Entwickler von Typo3 sind jedoch mit dem CMS zufriedener, als etablierten PHP Frameworks wie dem Zend Framework, CakePHP, Symphony oder ezComponents.
Für die Nachfolgeversion der aktuellen Typo3 Version - dann jedoch gleich der 5.0 - wird darum fleißig ein neues Framework entwickelt, dass sich an dem aus der Java Welt bekannten Spring Framework und Ruby on Rails orientiert gearbeitet.
Das neue PHP Framework wird unter dem Namen Flow3 entwickelt, und ist derzeit nur per SVN erreichbar - auch keine alpha Version ist derzeit verfügbar.
Das Zend Framework hat derweil die Version 1.5 als Preview veröffentlicht.
Die Orientierung an dem Spring Framework ist sicherlich nicht schlecht - dass jedoch jeder meint, ein eigenes Süppchen zu kochen ist in meinen Augen nicht der goldene Weg.

Vielleicht wird hier eine Form der Evolution stattfinden - nicht unbedingt von Fittnesskriterien getrieben, die für jeden Entwickler transparent sind, aber in jedem Fall macht es wenig Sinn, dass es n verschiedene Wege zum Ziel gibt.

PHP Forum Supportforen Ziel von Angriffen

5 February 2008

PHPbb.de war das erste Forum, welches meldetet, dass Benutzerdaten ausgespäht wurden. Der Meldung nach klingt es, als sei Zugriff auf die zugrundeliegende Datenbank genommen worden, und ein Datenbank-Dump gezogen worden.
Angeblich handelt es sich nicht um einen Fehler im phpBB, sondern um eine andere Lücke, die ausgenutzt wurde.
Dann folgten in rascher Abfolge Meldungen von ausgespähten Daten im Woltlab Burning Bord (WBB) Supportforum, nachdem das WBB Forum Opfer gezielte Angriffe wurde.
Nun meldet auch das Supportforum des Simple Machines Forum (SMF), dass hier Zugriff auf die Datenbank genommen wurde.
Drei gehackte Supportforen von PHP Forum Software innerhalb einer Woche? Das klingt sehr nach einem gezielten Angriff in meinen Augen - oder aber, dass nach der Veröffentlichung des Einbuchs im phpBB Supportforum die anderen ihre Logdateien genauer geprüft haben.
Bei allen Foren gilt, dass die Passwörter nicht im Klartext gespeichert wurden - jedoch gerade einfache Passwörter relativ einfach erraten werden könnten. Daher sollten Benutzer der jeweilligen Foren ihre Zugangsdaten sicherheitshalber überall ändern - ganz besonders, wenn das verwendetet Passwort bei einigen Diensten gleich ist.

Head First Software Development

22 January 2008

Head First Software Development ist das neueste Buch aus der Headfirst Reihe bei O'Reilly. Der deutsche Titel dürfte dann "Softwareentwicklung von Kopf bis Fuß" werden, sobald das Buch auf dem deutschen Markt erscheint. Ich habe das Buch auf englisch und möchte es jedem ans Herz legen.

Zend Framework und PHP: Beschleunigung durch Caching

21 December 2007

Das Zend Framework etabliert sich langsam zum Framework der Wahl für PHP Applikationen. Doch gerade wenn noch nicht so viele Erfahrungen vorlieren, kann es passieren, dass der Eindruck entsteht das Zend Framework sei noch nicht reif für den Produktiveinsatz, Bugs oder Performance Probleme bei dem "großen" Zend Framework werden hier schonmal als Gründe für die home-grown-Lösung genannt.

PhpBB die dritte

14 December 2007

PhpBB, eines der am meisten eingesetzten Forensysteme überhaupt ist in Version 3 erschienen. PhpBB3 Codename "Olympus" wurde kurz nach dem ersten Release von Phpbb2 gestartet und kann damit auf eine Entwicklungszeiit von rund fünf Jahren zurückblicken.
Neu sind unter anderem Dateianhänge für Postings und Privatnachrichten, Verwarnungen, ein erweitertes Rechtesystem und ein neues Templatesystem.
Umstellungen von phpbb2 sollten relativ reibungslos ablaufen - wenn man nicht verschiedene MODs und Hacks einsetzt. Dann könnte eine Umstellung aufwendiger werden, vor allem wenn für diese Erweiterungen keine offizielle Migrationsmöglichkeit besteht.
Man darf also davon ausgehen, dass viele etablierte phpbb2 Foren noch eine Weile ihren Dienst tun werden, und vor allem für neue Foren ein phpbb3 eingesetzt werden wird.

Zend Framework 1.0.3 für PHP veröffentlicht

30 November 2007

Zend hat das Zend Framework in Version 1.0.3 veröffentlicht. Auch wenn auf der Webseite noch keine Release Notes zu finden sind, kann man sich aus dem Jira Issuetracker des Zend Framework Projektes die "nderungen von 1.0.3 anschauen. Neben einigen Bugfixes gibt es auch neue Features, z.B. gibt es jetzt Unterstützung für YouTube Webservices und die Media Features der Google data API.
Download des Zend Framework unter http://framework.zend.com/download

Ich gebe noch die Release Notes aus dem Issuetracker wieder, Zend wird diese sicherlich noch auf der Webseite in einer News zusammenfassen.

Babylon: Eclipse Projekt mit verschiedenen Projekt-Typen

18 November 2007

Eclipse ist ein Framework und eine IDE, verschiedenste Programmiersprachen werden unterstützt - und genau davon möchte man auch Gebrauch machen.
Z.B. einen Teil eines Projektes in Python (pydev) einen anderen Teil in Groovy und einen Teil in Java programmieren. Das ganze soll am liebsten in einem Ordner liegen, der per Subversion (subversive) verwaltet wird.

Sobald ein Projekt aber z.B. ein Python Projekt ist, kann man dies nicht mehr mit Java verwenden. Die Lösung dafür ist, das eigentliche Projekt z.B. als generisches Projekt aus dem svn auszuchecken und anschließend Projekte für die einzelnen Sprachen anzulegen.
Mein Projekt heißt z.B. "product", dann lege ich mir ein Java Projekt an "product-java" und wähle dort aus, dass ich keine getrennten source und binary Ordner möchte, gebe aber zusätzliche Source Ordner an, die berücksichtigt werden soll. (Quasi wie symbolische Links)
Ordnet man jetzt noch die einzelnen Projekte den richtigen Perspektiven zu ist die Mehrsprachigkeit elegant gelöst.

PHP Zend Framework und Lucene 2.2 / 2.1

4 November 2007

Wer gerne per Zend Framework und PHP auf einen Lucene Index zugreifen möchte, der im neuen Index Format erstellt wurde, kann dazu einen Snapshot des Zend Framework verwenden.
(Seit Java Lucene 2.1 hat sich das Index Format geändert - neuere Lucene Versionen lesen problemlos die alte Version, beim Beschreiben wird jedoch in das neue Format konvertiert. Das aktuell veröffentliche Zend Framework kann mit dem neuen Index Format noch nichts anfangen.)
Die nightly Snapshots des Zend Framework gibts hier: framework.zend.com/download/snapshot/ Probleme machen dabei noch Felder, die gepackt gespeichert werden (Field.Store.COMPRESS), hier sollte man bei der Index Erstellung lieber auf Field.Store.YES setzen solange das Zend Framework hier noch nachholen muß.
Ebenso kann PHP Zend Search Lucene nur mit dem Compound Fileformat umgehen - auch hierauf sollte bei der Index Erstellung geachtet werden, wenn diese durch ein Java Programm erfolgt.

Zend Framework - 1.0.2

4 November 2007

Zend hat das Zend Framework für PHP 5 in Version 1.0.2 herausgebracht. Viel neues ist auf den ersten Blick nicht zu finden, vor allem Bugfixes und Performance Verbesserungen bei der Suche springen ins Auge.
Die Dokumentation der PDF Klassen und der Zend Framework Rahmenanforderungen hat Zend nach eigenen Angaben ebenfalls verbessert. Für das Zend Framework 1.1 ist unter anderem eine oeberarbeitung des PDF Supports geplant, der in der aktuellen Version noch gravierende Mängel im Vergleich zu anderen PDF Libraries für PHP aufweist.
Wie immer kann man das Zend Framework kostenlos von framework.zend.com herunterladen.

PHP ide: Eclipse für PHP Entwicklung

20 September 2007

Das Eclipse Plugin PDT, ehemals PHP-ide als defacto Nachfolger für phpeclipse von Zend entwickelt, ist nun in Version 1.0 erschienen!
Das Eclipse Plugin PDT erweitert Eclipse um PHP Entwicklerfunktionen. Syntax Highlighting, PHP auto-completion , Zugriff auf die PHP Hilfe und Funktionsreferenz.

Damit wird Eclipse ein Stückchen mehr das Google für Entwickler.

SVN Version in PHP verwenden

8 September 2007

Subversion ist der defacto Standard als Versionskontrollsystem nach dem "legendären" CVS.
Vor allem wenn es um debugging geht, ist es wichtig zu wissen welche Version einen Fehler oder ein Problem aufweist. Auch wenn es um Suchmaschinenoptimierung geht möchte man gerne wissen, welche Version Google im Cache hat.
Neben dem Datum der letzten "nderung bietet sich hier die eindeutige Revisionsnummer von Subversion an.
Dazu habe ich folgenden Schnipsel in einer utility Datei, die überall included wird:

function getSvnVersion()
{
    $svnId = '$LastChangedRevision$';
    $version = substr($svnId, 22); //remove $ Revision leader
    return intval(substr($version, 0, strlen($version) - 2)); //remove trailing garbage
}
An den nötigen Stellen steht dann ein echo getSvnVersion();

Nicht vergessen sollte man dann noch, im Subversion das keyword "LastChangedRevision" anzulegen - am besten rekursiv für alle betroffenen Dateien.


/
Copyright © 2007, 2008 everflux. Alle Rechte vorbehalten. All rights reserved.