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

问题描述 投票:0回答:4

文件夹中我有一个文件,名为

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

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

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

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

php filenames
4个回答
7
投票

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

Win32 上的绝对路径最多可以使用 260 个字符左右。在其他平台上还有其他限制,但至少需要 512 个字符,更多字符也并非闻所未闻。

(例如,在 GNU HURD 中,文件长度实际上没有限制,即使底层文件系统可能会施加限制。)

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

有一个 PHP 的

修改版,它使用了这个较新的 Windows API 位于 Github

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


2
投票
从 PHP 7.1 开始,核心直接支持 Windows 上的长路径和 UTF-8 路径。

干杯。



0
投票
很抱歉恢复旧线程。我发现

WFIO PHP 模块 与扩展长度路径格式 (\\?\

) 一起似乎仍然有用,以支持 Windows 中的长路径(最多 1024 个)。

# Local wfio://\\\\?\C:\path # Network wfio://\\\\?\UNC\server\path
    
© www.soinside.com 2019 - 2024. All rights reserved.