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.Ich habe das anhand eines Scriptes, info.php, das nicht tut, als phpinfo() aufzurufen, einmal dokumentiert. Das Script wird so aufgerufen: „/info.php//“ – zu erwarten ist nun, dass SCRIPT_NAME „info.php“ enthält, PATH_INFO „//“ und REQUEST_URI etc. ebenfalls sinnvolle Werte. (Aus REQUEST_URI und SCRIPT_NAME kann man sich die PATH_INFO auch einfach selber extrahieren – dazu sind jedoch korrekte Inhalte nötig.)

Hier der Vergleich zwischen Ubuntu Hardy und Ubuntu Intrepid, respektive PHP 5.2.6 (5.2.6-2ubuntu4.2)

php info 5.2.4

php info 5.2.6

Die Lösung also? „do-release-upgrade -d“ von Hardy nach Intrepid. Ich denke nicht, dass dies Verhalten in Hardy gefixt wird. Oder werden darf – schließlich könnte es ja sein, dass einige Anwendungen sich genau auf diesen Fehler verlassen.