2015-02-09 3 views
1

внутри папки У меня есть файл, названныйПочему PHP не может найти длинные имена файлов?

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

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

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

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

+4

Вы в Windows? – Thilo

+2

В Windows ограничено ограничение длины пути: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx#maxpath – Jojo

+0

@TOBIASK, У меня есть такое имя файла, и все. Итак, если вы знаете, опубликуйте решение, если нет, dont OFF-Topic. –

ответ

5

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

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

(К примеру, в GNU Hurd, там эффективно is no limit в файл длины, даже если файловая система может наложить ограничение.)

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

Существует версия PHP modified, в которой используется этот новый API Windows over at Github.

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

+0

Привет! К сожалению, я установил расширение, на которое вы указали, для поддержки более длинных путей, и оно по-прежнему вызывает ошибку. Я протестировал 'fopen (« wfio: // SHORTER_PATH »)', и он работает правильно, но не мой длинный путь. Есть идеи? –

+0

@MasterDJon, не совсем. Используете ли вы полный путь, как говорят документы? Кроме этого ... не очень, извините. –

+0

Да, я использовал fullpath (я сказал «был», потому что я изменил метод резервного копирования, чтобы сохранить путь в файле и переименовать их по порядковому номеру) –

1

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

Cheers.

+0

Хотя пути Unicode (не UTF-8), похоже, поддерживаются, длинные пути все еще нет. –

+0

Не уверен, что вы имеете в виду. UTF-16? Вещи буквально были сказаны - UTF-8 и длинный путь. Пожалуйста, проверьте UPGRADING и сообщите о проблемах, если увидите их. Благодарю. –

Смежные вопросы