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

PHP通过配置文件变量连接SQL出现访问拒绝错误,求助排查

问题根源:PHP相对路径的解析上下文

这个问题的核心是PHP中相对路径是基于当前执行脚本的工作目录,而不是包含它的文件的目录,咱们一步步拆解来理清楚:

为什么会出现密码为空的错误?

当loginCode.php(位于admin/目录)调用db_functions.php(位于public_html/目录)时,db_functions.php里的parse_ini_file('../config.ini')会以loginCode.php的执行目录(也就是admin/)为基准解析路径,最终变成admin/../config.ini——也就是public_html/config.ini,但你的config.ini实际在root/目录下,所以这个路径根本找不到配置文件!

当parse_ini_file找不到文件时会返回false,此时$config['password']属于未定义状态,传递给mysqli_connect的密码参数为空,自然就会报Access denied ... (using password: NO)的错误。

为什么其他场景能正常工作?

对应你测试的几种情况逐一分析:

  • 把db_functions的代码复制到loginCode.php并改路径:此时parse_ini_file('../../config.ini')是以loginCode.php的目录(admin/)为基准,../../会直接定位到root/,能正确找到config.ini。
  • 把loginCode.php移到public_html目录:此时调用db_functions.php时,db_functions里的../config.ini是以public_html/为基准,../直接指向root/,路径完全正确。
  • 把db_functions.php移到admin目录:这种情况如果没改路径理论上会出错,但你说能正常工作,大概率是移过去时顺手调整了路径,本质还是路径基准匹配上了配置文件的位置。

解决方案:使用绝对路径(推荐)

在db_functions.php里,用PHP的__DIR__常量构建绝对路径,这个常量表示当前文件所在目录的绝对路径,不管哪个脚本调用它,路径解析都是准确的。

修改db_functions.php里的配置文件加载行:

$config = parse_ini_file(__DIR__ . '/../config.ini');

__DIR__在这里就是public_html/的绝对路径,加上/../config.ini正好指向root/config.ini,完美解决路径问题。

另外,建议加个判断确保配置文件加载成功,避免后续的隐性错误:

$config = parse_ini_file(__DIR__ . '/../config.ini');
if (!$config) {
    die("Failed to load configuration file");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:47:30