【问题标题】:Fatal error : require(): Failed opening required致命错误:require():需要打开失败
【发布时间】:2015-02-13 23:16:10
【问题描述】:

所以,我有一个像这样的目录和子目录

+task
  +Include  
    +vendor  
     - autoload.php

  +Theme  
    +action
     - doInsert.php
    +objects
     - CardAccessor.php

当我尝试在CardAccessor.php中调用autoload.php时出现错误

doInsert.php

require_once '../objects/CardAccessor.php';

CardAccessor.php

require '/../include/vendor/autoload.php';

错误说:

警告:需要(/../include/vendor/autoload.php):无法打开流:没有这样的文件或目录 致命错误:require(): 无法打开所需的 '/../include/vendor/autoload.php'

【问题讨论】:

  • 文件/../include/vendor/autoload.php不存在。
  • Include 中尝试require '../../Include/vendor/autoload.php'; 与大写I。

标签: php path


【解决方案1】:

你需要定义一个配置

如果这是 linux unix 使用

$baseDir = "/base/dir"; //to define where in the root filesys where youre scripts and assets live

然后使用

$baseDir."/task/Include" or 
$baseDir."/task/Theme/objects/CardAccessor.php" or 
$baseDir."/task/include/vendor/autoload.php"

或者你可以创建

$sourceDir = $baseDir."/task/";

这也用于可移植性,如果您决定移动源,您可以修改配置;此外,这是一种在脚本中包含或要求文件的有效方式。

【讨论】:

    【解决方案2】:

    require '/../include/vendor/autoload.php' 不起作用,您需要去掉第一个斜线。正如它所写的那样,第一个斜杠告诉它去根目录,然后从那里向上一个(它不能这样做,它已经在根目录了)。

    鉴于您的目录结构,我相信require '../../include/vendor/autoload.php' 应该可以工作。

    【讨论】:

    • 我已经尝试了../include/vendor/autoload.php,还是不行
    • 我刚刚又看了一遍目录结构。您需要上两层,即../../include/vendor/autoload.php。我正在编辑我的答案以匹配。
    【解决方案3】:

    当您执行include 时,路径始终相对于包含该文件的文件。

    您需要输入require '../../Include/vendors/autoload.php' 或设置完整路径,如require '/my/project/path/task/Include/vendor/autoload.php'

    这与您的问题有关:PHP - Relative paths "require"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2017-10-11
      • 2016-07-06
      • 1970-01-01
      相关资源
      最近更新 更多