在CodeIgniter子文件夹中需要一个类?

时间:2013-03-22 20:07:05

标签: php codeigniter

我有这个结构

controllers
- base.php
\ subfolder
  - home.php

home.php我想打电话

require("../base.php")

但它给出了一条错误消息,指出找不到该文件。它在同一个文件夹上工作。

有没有办法让它在子文件夹上运行?

4 个答案:

答案 0 :(得分:2)

您可以尝试使用完整路径:

$origin = $_SERVER['DOCUMENT_ROOT'];
$home = $origin. "/controllers/home.php";
require($home);

但是我知道长期对屁股很痛苦,但这是一个解决方案。我之前从未遇到过这样的问题。

但也许这会有更多的帮助? PHP include file. Showing error file not found

答案 1 :(得分:1)

尝试:

require("/<full dir path>/base.php");

另一个提示 - 有时在Windows中(如果您计划在Linux上部署,则无用)有时您必须使用双斜杠来逃避'\\'。

如果这不起作用,则可能是权限问题。

编辑:使用此功能获取包含路径:

echo ini_get('include_path');

这会告诉你使用哪条路径。

答案 2 :(得分:1)

CodeIgniter从index.php脚本内执行,require函数的路径基于index.php路径解析。例如,如果您将test.php放在CodeIgniter根文件夹中,然后您将从控制器中调用require './test.php',那么test.php将会包含在内而不会出现问题。

要回答这个问题,我们需要php magic constant __DIR__,它始终设置为当前脚本文件夹。答案是:

require __DIR__."/../base.php";

home.php内调用。

编辑:与平台无关的解决方案将是:

require __DIR__.DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."base.php";

答案 3 :(得分:0)

在撰写本文时,接受的答案是正确的,require(和类似函数)路径基于index.php的位置。但是,CodeIgniter在index.php中定义了非常有用的常量,允许您创建指向应用程序各个部分的路径。

APPPATH常量非常适合指向控制器/库/等。

require APPPATH . 'controllers/base.php';

更好的解决方案是以application/core/MY_Controller.php的形式创建基本控制器。然后,您可以使用MY_Controller扩展控制器,而无需任何文件。 Check out Phil's article about Base Controllers.