我有这个结构
controllers
- base.php
\ subfolder
- home.php
在home.php
我想打电话
require("../base.php")
但它给出了一条错误消息,指出找不到该文件。它在同一个文件夹上工作。
有没有办法让它在子文件夹上运行?
答案 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.