You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP 8.2下glob()读取网络路径返回空数组问题求助

解决PHP 8.2下glob()读取Windows网络路径返回空数组的问题

针对你升级到PHP 8.2后glob()读取UNC网络路径返回空的问题,结合Windows环境特性,以下是排查和解决方向:

1. 检查open_basedir配置限制

PHP 8.x对open_basedir的检查更严格,即使文件系统权限正常,若该配置未包含目标UNC路径,glob()会静默返回空数组。

  • 打开XAMPP的php.ini,查找open_basedir项
  • 若配置了路径,添加目标UNC路径(格式://10.0.0.10/Docs)到允许列表,或者临时注释掉该配置测试
  • 修改后重启Apache服务

2. 转义路径中的特殊匹配字符

你的路径包含(02000-02999),括号是glob()的特殊匹配字符(用于分组匹配),PHP 8.2对这类字符的解析规则更严格,需要转义:

// 转义路径中的括号(双引号下需双重转义反斜杠)
$folder_path = "\\\\10.0.0.10\\Docs\\T\\T\\(02000-02999)\\T-02345";
// 或者改用正斜杠(PHP在Windows下支持正斜杠路径,无需转义)
$folder_path = "//10.0.0.10/Docs/T/T(02000-02999)/T-02345";

3. 移除不必要的GLOB_BRACE参数

你的通配符*Scoping.[Pp][Dd][Ff]并未使用大括号匹配语法(如{pdf,PDF}),GLOB_BRACE参数属于多余配置,且PHP 8.x对该参数的Windows兼容性有调整,移除后测试:

$file = glob($folder_path . "/*Scoping.[Pp][Dd][Ff]");

4. 验证网络路径的可访问性

先确认PHP进程能正常访问目标共享目录:

// 测试目录是否存在
var_dump(is_dir($folder_path));
// 列出目录内容
var_dump(scandir($folder_path));

如果is_dir返回false,说明PHP进程无法访问该共享,需检查Windows Server 2019的SMB设置(比如确认Apache服务运行账户拥有共享访问权限,或调整SMB协议兼容配置)。

5. 替换glob()为DirectoryIterator(备选方案)

如果上述方法无效,可改用PHP的DirectoryIterator类遍历文件,避免glob()的版本兼容性问题:

$files = [];
$iterator = new DirectoryIterator($folder_path);
foreach ($iterator as $fileInfo) {
    if (!$fileInfo->isDot() && preg_match('/.*Scoping\.(pdf|PDF)$/i', $fileInfo->getFilename())) {
        $files[] = $fileInfo->getPathname();
    }
}
var_dump($files);

内容的提问来源于stack exchange,提问作者sam6640621

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:12:47