PHP需要来自另一个目录的文件:没有这样的文件或目录

时间:2017-05-30 13:08:54

标签: php

我的项目结构:

/Controllers
/Models
index.php

从我的index.php我包含控制器并从该控制器调用一个函数:(它在根文件夹中)

include 'Controllers/CategoriesController.php';
$content = CategoriesController::getCategories();

CategoriesController.php(位于controllers目录中):

static function getCategories(){
    require '../Models/Database.php';
    $link = mysqli_connect($host, $user, $password, $database);
    ...

这里我在require行中出错:require(../ Models / Database.php):无法打开流:没有这样的文件或目录......

为什么呢?如何解决这个错误?谢谢!

2 个答案:

答案 0 :(得分:2)

尝试绝对路径而不是相对路径。更改以下

require '../Models/Database.php';

require $_SERVER['DOCUMENT_ROOT'].'/Models/Database.php';

'DOCUMENT_ROOT'     正在执行当前脚本的文档根目录,如服务器配置文件中所定义。 http://php.net/manual/en/reserved.variables.server.php

答案 1 :(得分:2)

As described on PHP's documentation regarding include

  

根据给定的文件路径包含文件,如果没有给出,则指定include_path。如果在include_path中找不到该文件,include将最终在调用脚本自己的目录和当前工作目录之前检查失败。 include构造将发出警告,如果它无法找到文件;这与require的行为不同,会发出致命的错误。

因此,require中的Controllers/CategoriesController.php调用将相对于包含主脚本(index.php)的文件夹,解释了您收到此错误消息的原因。

但是,解释器会公开一个神奇的变量__DIR__,并包含当前文件的完整路径。 __DIR__从PHP 5.3开始存在,其值与dirname(__FILE__)相同。因此,以下列方式调用require(或include)将按照您的预期行事:

require __DIR__ . '../Models/Database.php';