在文件夹中我有一个文件,名为
`111-aaaaaa aa aaaa-,._aaaaaaa; aaaaaaaa, aa aaaaaaaaaa, aaaaaaaaa aaaaaaaa. 03.01.10. 38.38 aaaaa.txt`
当我使用 PHP 浏览该目录(或尝试读取该文件)时:
var_dump(glob('MyFolder/*'));exit;
找不到该文件。什么问题? (如果我缩短文件名,那么它就可以找到。我在Windows上)
Windows 在其原始 Win32 API 中尤其具有非常短的文件名限制。这个一般问题在 here at SO 进行了讨论。
Win32 上的绝对路径最多可以使用 260 个字符左右。在其他平台上还有其他限制,但至少需要 512 个字符,更多字符也并非闻所未闻。
(例如,在 GNU HURD 中,文件长度实际上没有限制,即使底层文件系统可能会施加限制。)
但是,Windows 实际上可以有更长的文件名(显然,就像您的计算机上有它们一样)。这是通过使用更新的 Windows API 来实现的。不幸的是,据我所知,标准 PHP 不使用这个 API。有一个 PHP 的
修改版,它使用了这个较新的 Windows API 位于 Github。
使用新 API 的另一个好处是它还支持文件名中的 Unicode 字符。
干杯。
WFIO PHP 模块 与扩展长度路径格式 (\\?\
) 一起似乎仍然有用,以支持 Windows 中的长路径(最多 1024 个)。
# Local
wfio://\\\\?\C:\path
# Network
wfio://\\\\?\UNC\server\path