【问题标题】:How to solve the fatal error in require_once如何解决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' 失败

标签: php file include require-once include-once


【解决方案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 保留在根文件夹中,这更符合逻辑。

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 2016-08-05
      • 2012-02-18
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 2015-04-08
      相关资源
      最近更新 更多