PHP: Dateizugriff mit Umlauten unter Windows

Dateien auf Webservern sollten stets ohne Leerzeichen (nicht "dies ist ein bild.jpg"), ohne Umlaute oder Sonderzeichen (nicht "fußball.jpg"), ohne Backslashes (nicht "Arbeit\Auto.jpg") sowie in Kleinschreibung (nicht "test.JPG") abgelegt werden. Kürzlich musste ich für ein Kundenprojekt jedoch auf eine Vielzahl vorgegebener Dateien beliebigen Dateinamens zugreifen und diese weiter verarbeiten.


Linux-Systeme ermöglichen standardmäßig den Zugriff auf Dateien mit Umlauten und Sonderzeichen, sodass hier keine Besonderheiten beachtet werden müssen. Ganz anders sieht es aus auf Windows-Systemen: Hier muss man ziemlich tricksen und die COM-Schnittstelle anzapfen. Zunächst einmal bindet man in die php.ini die benötigte Extension mit

[COM_DOT_NET]
extension = php_com_dotnet.dll

ein. Nun kommt die sehr hilfreiche Helper-Klasse WinfsUtf8 zum Einsatz, die den Zugriff auf die COM-Objekte stark vereinfacht und nahezu alle PHP-Funktionen, die Dateien betreffen, abbildet. Nach Einbindung der Datei mit

require_once('WinfsUtf8.php');

hat man alle Möglichkeiten des Dateizugriffes, beispielsweise ergibt

file_exists('ä.jpg');

fälschlicherweise false, wohingegen

Patchwork\PHP\Override\WinfsUtf8::file_exists('ä.jpg');

true ergibt.

Zurück