MacOS High Sierra下XAMPP(PHP5.6.35)跨目录调用数据库类问题求助
解决XAMPP中同级目录PHP文件引用问题
看起来你遇到的是PHP文件路径解析的典型问题——相对路径的基准并不是你想的那样!下面给你几个可靠的解决方案,按推荐程度排序:
1. 使用绝对路径(最稳妥的方案)
直接利用PHP的$_SERVER['DOCUMENT_ROOT']变量,它会返回XAMPP中htdocs目录的绝对路径。在你的blog/index.php里改成这样:
require($_SERVER['DOCUMENT_ROOT'] . '/database/dbconnect.php');
这个方法不管你的脚本放在哪个子目录,都能精准定位到database下的文件,完全避免相对路径的歧义。
2. 基于当前脚本目录的相对路径
如果你不想依赖$_SERVER变量,可以用__DIR__常量(PHP 5.3+支持,你的5.6版本完全没问题),它代表当前脚本所在的目录(也就是blog目录)。通过../回到上一级(htdocs)再指向database:
require(__DIR__ . '/../database/dbconnect.php');
这种写法也很可靠,因为它的基准是脚本的实际位置,不受PHP工作目录的影响。
3. 检查并修正PHP工作目录
有时候PHP的当前工作目录并不是你以为的blog目录,你可以先在blog/index.php里加一行代码排查:
echo getcwd(); // 输出当前工作目录
如果输出的不是htdocs,那你的相对路径database/dbconnect.php就会从错误的目录开始查找。这种情况下,你可以在脚本开头切换工作目录:
chdir($_SERVER['DOCUMENT_ROOT']); // 切换到htdocs目录 require('database/dbconnect.php');
不过这个方法不如前两种灵活,不推荐作为首选。
4. 排查文件权限问题
如果路径没错但还是无法访问,可能是Mac的文件权限限制了Web服务器(XAMPP用的是_www用户)读取database目录下的文件。你可以打开终端,进入htdocs目录,执行以下命令设置权限:
chmod -R 755 database/ chmod 644 database/dbconnect.php
这样能确保Web服务器拥有读取文件的权限。
内容的提问来源于stack exchange,提问作者awebster
相关产品推荐
相关产品推荐

