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

PHP中使用require_once引入文件失败,出现致命错误该如何解决?

解决PHP require_once引入文件的致命错误问题

问题背景

你的项目目录结构如下:

Online-sneaker--Marketplace/
├── index.php
└── modules/
    ├── pages/
    │   └── home.php
    ├── scripts/
    │   └── connection.php
    ├── db/
    └── uploads/

当通过index.php引入home.php时,home.php中使用require_once('../scripts/connection.php')触发致命错误,原因是PHP的相对路径是相对于当前执行脚本(即index.php)的目录,而非被引入文件的目录,导致路径解析错误。

解决方案

方法1:使用__DIR__魔术常量(最可靠)

__DIR__是PHP内置魔术常量,代表当前文件所在的绝对目录,用它构建路径可彻底避免相对路径混乱。

修改home.php中的引入代码:

<?php
    // 从home.php所在的modules/pages目录,向上退一级到modules,再指向scripts/connection.php
    require_once(__DIR__ . '/../scripts/connection.php');
?>

同时修正connection.php中的数据库文件路径(同样规避相对路径问题):

<?php
    $dbPath = __DIR__ . '/../db/sneaker_haven.sqlite3';
    if(!is_file($dbPath)){
        file_put_contents($dbPath, null);
    }

    $conn = new PDO('sqlite:' . $dbPath);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>

方法2:设置项目根目录为包含路径

在index.php最顶部添加代码,将项目根目录加入PHP的包含路径,后续所有引入可基于根目录写路径:

<?php
    // 定义项目根目录(即index.php所在的目录)
    define('PROJECT_ROOT', __DIR__);
    // 将根目录添加到PHP的包含路径
    set_include_path(get_include_path() . PATH_SEPARATOR . PROJECT_ROOT);
?>

修改home.php的引入代码:

<?php
    require_once('modules/scripts/connection.php');
?>

修改connection.php的数据库路径:

<?php
    $dbPath = PROJECT_ROOT . '/modules/db/sneaker_haven.sqlite3';
    if(!is_file($dbPath)){
        file_put_contents($dbPath, null);
    }

    $conn = new PDO('sqlite:' . $dbPath);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>

方法3:修正相对路径(仅临时应急,不推荐)

因为当前执行脚本是index.php,所以相对路径要基于index.php所在目录。修改home.php:

<?php
    require_once('modules/scripts/connection.php');
?>

⚠️ 注意:如果后续home.php被其他目录下的脚本引入,这个路径会再次失效,因此不推荐长期使用。

错误原因解析

你原本的../scripts/connection.php是相对于home.php的目录,但当index.php引入home.php时,PHP的当前工作目录是index.php所在的Online-sneaker--Marketplace/,此时../会指向该目录的上级/home/gogi/Desktop/sc/,再拼接scripts/connection.php就变成了不存在的../../modules/scripts/connection.php,这就是错误日志中路径异常的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:57:22