如何修复「Trying to access array offset on value of type bool」错误?
解决「Trying to access array offset on value of type bool」错误
你的错误出在最后一行list($type,$balance,$pm,$ref)=explode(':',$data[0]);,核心原因是file($filename)没有返回预期的数组,而是返回了布尔值false,直接访问$data[0]相当于对布尔值做数组偏移操作,所以触发报错。
为什么file()会返回false?
- 文件不存在:拼接后的
$filename路径错误,或者对应文件已被删除 - 权限不足:PHP运行进程没有读取该文件的权限
- 路径无效:
$SESSION_FOLDER或$id为空,导致生成的路径不合法
修复方案
在代码中增加文件状态校验,避免直接对错误结果操作:
global $SESSION_FOLDER; $filename = $SESSION_FOLDER . '/' . $id; // 初始化变量避免未定义问题 $type = $balance = $pm = $ref = ''; // 先验证文件是否存在且可读 if (file_exists($filename) && is_readable($filename)) { $data = file($filename); // 再检查文件是否有内容 if (!empty($data)) { list($type,$balance,$pm,$ref) = explode(':',$data[0]); } }
额外优化点
- 去掉不必要的
ob_start()和ob_end_clean():file()函数不会向输出缓冲写入内容,这两句代码是多余的 - 检查
$SESSION_FOLDER和$id的值:确保拼接后的路径是合法的,比如可以临时加var_dump($filename)确认路径是否正确
内容的提问来源于stack exchange,提问作者yofix22044
相关产品推荐
相关产品推荐

