Почему PHP не может найти длинные имена файлов?

внутри скоросшиватель У меня есть файл с именем

`111-aaaaaa aa aaaa-,._aaaaaaa;  aaaaaaaa, aa aaaaaaaaaa, aaaaaaaaa aaaaaaaa.   03.01.10.  38.38 aaaaa.txt`

когда я просматриваю этот каталог с помощью PHP (или пытаюсь прочитать этот файл):

var_dump(glob('MyFolder/*'));exit;

Он не может найти этот файл. В чем проблема?
(если я укорачиваю имя файла, то оно становится доступным для поиска. Я нахожусь на окнах)

2

Решение

В частности, Windows имеет очень короткое ограничение имени файла в своем исходном Win32 API. Эта общая проблема обсуждается здесь, на SO.

Максимум около 260 символов могут быть использованы в абсолютном пути на Win32. На других платформах есть и другие ограничения, но можно ожидать не менее 512 символов, а больше — не случайно.

(Например, в GNU HURD, там эффективно является нет предел на длину файла, даже если базовая файловая система может накладывать ограничение.)

Однако на самом деле Windows может иметь более длинные имена файлов (очевидно, так как они у вас есть на вашем компьютере). Это работает с использованием более нового Windows API. К сожалению, стандартный PHP не использует этот API, насколько я знаю.

Eсть модифицированный версия PHP, которая использует этот новый Windows API в Github.

Еще одно преимущество использования этого более нового API заключается в том, что он также поддерживает символы Unicode в именах файлов.

5

Другие решения

пытаться scandir()
это показать список файлов в массиве.

1

Начиная с PHP 7.1 long и пути UTF-8 в Windows поддерживаются непосредственно в ядре.

Приветствия.

1
По вопросам рекламы [email protected]