Wenn PHP nicht mehr ausgeführt wird

Wenn man einen Linux Webserver betreibt, der normalerweise UTF-8 benutzt, und ein Windowsfan speichert in seinem Lieblingstexteditor die PHP Datei ab, dann kann das voll in die Hose gehen.

Windows UTF-16LE in PHP Skripten

So geschehen bei einem Projekt das ich für Freunde betreue. Eine klitzekleine Anpassung an einem Textblock führte dazu, daß der Windowstexteditor der Wahl, statt dem vorgefundenen UTF-8, den Text als Windows Hausformat UTF-16LE abspeicherte.

Merken tut man das daran, daß man ums verrecken alles richtig im Webserver eingestellt hat, aber das PHP als HTML ausgegeben wird. Da wird sogar der PHP Interpreter korrekt aufgerufen, aber nicht mal der kann das Script korrekt als PHP erkennen und gibt es dann einfach als Text aus. Weil es keinen PHP Fehler gibt, ohne PHP auch kein Wunder, gibt es auch keine Fehlermeldung im Apachelogfile dazu.

Ihr könnt die mit vi , Gedit, Fokuswriter oder einem beliebigen anderen Editor aufmachen, keiner von denen wird Euch sagen, daß der Zeichensatz UTF-16LE ist und es klammheimlich genauso wieder abspeichern. Das PHP Script funktioniert dann einfach trotzdem nicht.

Des Rätsels Lösung

Wenn Ihr also mal vor einem Rätsel steht, wieso alle anderen PHP Scripte laufen, nur das eine nicht, könnte Euch das helfen:
1. mit „file filename.php“ den Typ bestimmen:

So müßte es aussehen:

camel.php: PHP script, UTF-8 Unicode (with BOM) text, with CRLF line terminators

So könnte es aussehen:

camel.php: Little-endian UTF-16 Unicode text, with CRLF, CR line terminators

2. So behebt Ihr es:

iconv -c -f UTF16LE -t UTF-8 < camel.php >camel2.php

Danach funktioniert das Script wieder und Ihr könnt dem Schuldigen die Ohren langziehen gehen 😉