如何解决require_once中的致命错误
Posted
技术标签:
【中文标题】如何解决require_once中的致命错误【英文标题】:How to solve the fatal error in require_once 【发布时间】:2020-11-22 13:19:52 【问题描述】:我的项目有两个入口点
project (root-folder)
/config(folder)
config.php
/service(folder)
service.php
index.php
例如
文件 1:/index.php (第一个入口点) - 这里我们包含配置文件夹中的配置
<?php
require_once('config/config.php');
require_once('service/service.php');
?>
文件 2:service/service.php - 这里我们包含配置文件夹中的配置
<?php
require_once('../config/config.php');
?>
如果我调用文件 2:service/service.php 没有致命错误
但是当我调用文件 1:/index.php 时,它变成了致命错误,因为它无法要求 'service/service.php' 因为它再次要求并且配置路径无效
如何解决这个问题。
【问题讨论】:
这似乎不太可能,因为require_once
只需要一次。
不确定../
是否有所作为,但从技术上讲应该不会。
是否需要动态方式的路径
你能发布确切的错误吗?
require_once(): 当我们调用 index.php 时打开所需的 'config/config.php' 失败
【参考方案1】:
原因:
出现此问题是因为您的执行从index.php
开始,然后您需要service/service.php
。现在在service.php
中,当您执行../config/config.php
时,PHP 会尝试从index.php
的角度解析目录路径,但找不到任何此类文件或目录。因此,错误。
解决方案:
在index.php
中声明一个常量。检查service/service.php
中是否存在此常量。如果不是,则要求它,否则像下面这样跳过它:
index.php:
<?php
define('INDEX_ENTRY_POINT',true);
require_once('config/config.php');
require_once('service/service.php');
?>
service.php:
<?php
if(!defined('INDEX_ENTRY_POINT'))
require_once('../config/config.php');
?>
注意:最好使用__DIR__
提供绝对路径而不是相对路径以避免此类问题。
【讨论】:
【参考方案2】:你必须考虑当你从 index.php 调用 service.php 时,根是 index.php 的根。现在有很多方法可以解决这个问题。您可以决定 service.php 是主控制器,就像 index.php 一样,因此属于根文件夹。如果出于某种原因您想保持原样,那么您必须定义根以使其适应上面的 vivek_23 答案中的情况。就个人而言,我会将 service.php 保留在根文件夹中,这更符合逻辑。
【讨论】:
以上是关于如何解决require_once中的致命错误的主要内容,如果未能解决你的问题,请参考以下文章
require_once() 中的 PHP 致命错误可以 n