Bestanden op webservers moeten altijd zonder spaties (dus niet "dit is een afbeelding.jpg"), zonder umlauten of speciale tekens (dus niet "voetbal.jpg"), zonder backslashes (dus niet "werk\auto.jpg") en in kleine letters (dus niet "test.JPG") worden opgeslagen. Onlangs moest ik echter voor een klantproject een groot aantal vooraf gedefinieerde bestanden met willekeurige bestandsnamen openen en verwerken.
Linux-systemen bieden standaard toegang tot bestanden met umlauten en speciale tekens, zodat hier geen rekening hoeft te worden gehouden met speciale functies. Het ziet er heel anders uit op Windows-systemen: hier moet je wat trucs gebruiken en de COM-interface gebruiken. Allereerst neemt u de vereiste extensie op in php.ini
[COM_DOT_NET] extension = php_com_dotnet.dll
een. Nu wordt de zeer behulpzame helper-klasse WinfsUtf8 gebruikt, die de toegang tot de COM-objecten aanzienlijk vereenvoudigt en bijna alle PHP-functies die van invloed zijn op bestanden, in kaart brengt. Na integratie van het bestand met
require_once('WinfsUtf8.php');
men heeft alle mogelijkheden van bestandstoegang, bijvoorbeeld resultaten
file_exists('ä.jpg');
onjuist onjuist, terwijl
Patchwork\PHP\Override\WinfsUtf8::file_exists('ä.jpg');
geeft true terug.