我的项目结构:
/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):无法打开流:没有这样的文件或目录......
为什么呢?如何解决这个错误?谢谢!
答案 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';