Проблема в связи между windows и php. Невозможно получить имена файлов в Юникоде, потому что они зависят от языка приложения, не поддерживающего Юникод.
Лучшее решение - выполнить команду dir и получить информацию для обработки, но вы должны сделать это с помощью cmd и получить короткие имена Windows:
chcp 65001
dir /x c:\test\ > myinfo.txt
Возвращает:
El volumen de la unidad C es Windows8_OS
El número de serie del volumen es: 14A3-025F
Directorio de C:\test
22/12/2015 22:11 <DIR> .
22/12/2015 22:11 <DIR> ..
22/12/2015 22:12 0 a.txt
22/12/2015 22:10 <DIR> English
22/12/2015 22:10 <DIR> ESPAOL~1 Español
22/12/2015 22:11 <DIR> 8311~1 ру́сский язы́к
22/12/2015 22:10 <DIR> _0B41~1 عربي ,عربى
22/12/2015 22:10 <DIR> 8F4C~1 北方話
1 archivos 0 bytes
7 dirs 839.672.786.944 bytes libres
Затем вы можете прочитать myinfo.txt, чтобы получить связь между оригинальным именем и коротким именем Windows.
Некоторые функции PHP отлично работают с короткими именами, и вы можете строить и массивировать, как если бы вам нужно было отобразить это:
$array['short_name']= $original_name;
Например: is_dir, is_file
отлично работает . Тем не менее, scandir
или is_readable
завершается с короткими именами . Решением для использования этих функций является рекурсивный повторный запуск команды dir.
Чтобы получить информацию из txt-файла, вы можете использовать регулярное выражение или substr, отбрасывая первые пять строк и последние две. Например:
for($k=6;$k<(count($array)-2);$k++) ...