PHP: Dostęp do plików z umlautami pod Windows

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ę.

Plecy