Pliki na serwerach WWW powinny być zawsze przechowywane bez spacji (nie „to jest obraz.jpg”), bez umlautów i znaków specjalnych (nie „piłka nożna.jpg”), bez ukośników odwrotnych (nie „work\car.jpg”) i małymi literami (nie „test.JPG”). Ostatnio jednak, w ramach projektu dla klienta, musiałem uzyskać dostęp i przetworzyć dużą liczbę predefiniowanych plików o dowolnych nazwach.
Systemy Linux domyślnie zezwalają na dostęp do plików z umlautami i znakami specjalnymi, więc nie trzeba tutaj uwzględniać żadnych specjalnych funkcji. Zupełnie inaczej wygląda w systemach Windows: tutaj musisz użyć kilku sztuczek i wejść do interfejsu COM. Przede wszystkim należy dołączyć wymagane rozszerzenie do php.ini
[COM_DOT_NET] extension = php_com_dotnet.dll
jeden. Teraz używana jest bardzo pomocna klasa WinfsUtf8 , która znacznie upraszcza dostęp do obiektów COM i odwzorowuje prawie wszystkie funkcje PHP, które mają wpływ na pliki. Po integracji pliku z
require_once('WinfsUtf8.php');
mamy wszystkie możliwości dostępu do plików, na przykład wyników
file_exists('ä.jpg');
niepoprawnie fałszywe, podczas gdy
Patchwork\PHP\Override\WinfsUtf8::file_exists('ä.jpg');
zwraca prawdę.