为什么 PHP 找不到长文件名?
Why can't PHP find long 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)
Windows 在其原始 Win32 API 中尤其有一个非常短的文件名限制。 here at SO.
讨论了这个一般性问题
Win32的绝对路径最多可以使用260个字符。在其他平台上还有其他限制,但至少 512 个字符是可以预料的,更多的也不是闻所未闻。
(例如,在 GNU HURD 中,有效地 is no limit 文件长度,即使底层文件系统可能施加限制。)
但是,Windows 实际上可以有更长的文件名(很明显,因为您的计算机上有它们)。这可以通过使用更新的 Windows API 来实现。不幸的是,据我所知,标准 PHP 不使用此 API。
有个modified version of PHP which makes use of this newer Windows API over at Github.
使用更新的 API 的另一个好处是它还支持文件名中的 Unicode 字符。
尝试scandir()
它在数组中显示列表文件。
从 PHP 开始,核心直接支持 Windows 上的 7.1 长路径和 UTF-8 路径。
干杯。
在文件夹中我有一个文件,名为
`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 中,有效地 is no limit 文件长度,即使底层文件系统可能施加限制。)
但是,Windows 实际上可以有更长的文件名(很明显,因为您的计算机上有它们)。这可以通过使用更新的 Windows API 来实现。不幸的是,据我所知,标准 PHP 不使用此 API。
有个modified version of PHP which makes use of this newer Windows API over at Github.
使用更新的 API 的另一个好处是它还支持文件名中的 Unicode 字符。
尝试scandir()
它在数组中显示列表文件。
从 PHP 开始,核心直接支持 Windows 上的 7.1 长路径和 UTF-8 路径。
干杯。