PHP通过glob获取.vic文件后file_get_contents无法读取内容求助
解决PHP中glob获取.vic文件后无法用file_get_contents读取的问题
让我来帮你排查这个问题,看起来核心问题出在路径匹配和文件读取的细节上,我们一步步拆解解决:
1. 先确认glob的路径是否正确
你当前用的glob('*.vic')是基于PHP脚本所在的当前目录来查找文件的,而你后续用$_SERVER['DOCUMENT_ROOT'].'/server/main/'来拼接读取路径,这两个路径很可能不一致!
举个例子:如果你的PHP脚本放在/var/www/html/(也就是DOCUMENT_ROOT),那glob('*.vic')找的是/var/www/html/*.vic,但你的目标文件实际在/var/www/html/server/main/,自然找不到任何文件,foreach循环根本不会执行,也就没有内容输出。
解决方法:给glob传入目标目录的绝对路径,让它直接去正确的目录找文件:
$targetDir = $_SERVER['DOCUMENT_ROOT'] . '/server/main/'; $fileList = glob($targetDir . '*.vic');
2. 验证glob是否真的找到了文件
在foreach循环前加一行调试代码,确认$fileList里是否有内容:
var_dump($fileList);
如果输出是空数组array(0) { },那就说明第一步的路径问题还没解决,需要再次核对$targetDir的正确性。
3. 检查文件权限与可读性
即使路径正确,PHP进程可能没有读取这些.vic文件的权限。你可以在循环里添加可读性检查:
foreach($fileList as $filename) { if(!is_readable($filename)){ echo "无法读取文件:" . $filename . "<br>"; continue; } echo file_get_contents($filename) . "\r\n"; }
4. 开启错误报告,获取具体报错信息
你提到有"无法访问"的提示,但没看到具体错误。在脚本开头添加以下代码,强制显示所有错误,这会帮你快速定位问题(比如文件不存在、权限不足等):
error_reporting(E_ALL); ini_set('display_errors', 1);
修正后的完整示例代码
<?php // 开启错误报告,方便排查问题 error_reporting(E_ALL); ini_set('display_errors', 1); $targetDir = $_SERVER['DOCUMENT_ROOT'] . '/server/main/'; // 输出目标目录,确认路径正确 echo "目标目录:" . $targetDir . "<br>"; // 用绝对路径调用glob,确保找到目标目录下的.vic文件 $fileList = glob($targetDir . '*.vic'); // 检查是否找到文件 if(empty($fileList)){ echo "目标目录下没有找到.vic文件!"; } else { foreach($fileList as $filename) { // 尝试读取文件 $content = file_get_contents($filename); if($content === false){ echo "读取文件失败:" . $filename . "<br>"; } else { echo "文件内容:<br>" . $content . "<br><hr>"; } } } ?>
这个修正版本做了这些优化:
- 用绝对路径调用glob,确保找到正确目录下的文件
- 增加了多环节的错误检查和提示
- 直接使用glob返回的绝对路径读取文件,避免二次拼接路径出错
内容的提问来源于stack exchange,提问作者Sanne
相关产品推荐
相关产品推荐

