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.