0

我有这个结构

controllers
- base.php
\ subfolder
  - home.php

home.php我想打电话

require("../base.php")

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

有没有办法让它在子文件夹上工作?

4

4 回答 4

2

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

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

但我明白,从长远来看,这是一种痛苦,但它是一种解决方案。我以前从来没有遇到过这样的问题。

但也许这可能会有更多帮助?PHP 包含文件。显示未找到错误文件

于 2013-03-22T20:17:08.400 回答
1

尝试:

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

另一个提示 - 有时在 Windows 中(如果您打算在 Linux 上部署则没有帮助)有时您必须使用双斜杠来转义 '\\'。

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

编辑:使用它来获取您的包含路径:

echo ini_get('include_path');

这将告诉您使用哪条路径。

于 2013-03-22T20:13:58.487 回答
1

CodeIgniter is executed from within index.php script and paths of require function are resolved based on index.php path. For example if you would put test.php in CodeIgniter root folder and then you would call require './test.php' from your controller then the test.php would be included without a problem.

To answer the question we need php magic constant __DIR__ which is always set to current script folder. The answer is:

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

called from within home.php.

Edit: And platform independent solution would be:

require __DIR__.DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."base.php";
于 2013-03-22T20:46:23.013 回答
0

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

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

require APPPATH . 'controllers/base.php';

更好的解决方案是以application/core/MY_Controller.php. MY_Controller然后,您可以在不需要任何文件的情况下扩展您的控制器。查看 Phil 关于基本控制器的文章。

于 2013-03-22T22:44:54.830 回答