为什么PHP不能找到长文件名?

时间:2015-02-09 10:27:01

标签: php filenames

文件夹内我有一个名为

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

当我使用PHP浏览该目录(或尝试读取该文件)时:

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

它无法找到该文件。有什么问题?  (如果我缩短文件名,那么它就变得可以了。我在Windows上)

3 个答案:

答案 0 :(得分:5)

Windows特别是在其原始Win32 API中具有非常短的文件名限制。讨论了这个一般性问题here at SO

在Win32上的绝对路径中最多可以使用大约260个字符。在其他平台上还有其他限制,但预计至少会有512个字符,而且更多的是不是闻所未闻的。

(例如,在GNU HURD中,文件长度有效is no limit,即使基础文件系统可能会施加限制。)

然而,Windows实际上可以有更长的文件名(显然,就像你在计算机上拥有它们一样)。这可以通过使用更新的Windows API来实现。不幸的是,据我所知,标准PHP不使用此API。

modified版本的PHP使用这个较新的Windows API over at Github

使用这个较新的API的另一个好处是它还支持文件名中的Unicode字符。

答案 1 :(得分:1)

尝试scandir() 它在数组中显示列表文件。

答案 2 :(得分:1)

从PHP 7.1开始,Windows上的long和UTF-8路径直接支持在核心。

干杯。