【问题标题】:Require a class in CodeIgniter subfolder?需要 CodeIgniter 子文件夹中的类?
【发布时间】:2013-03-22 20:07:05
【问题描述】:

我有这个结构

controllers
- base.php
\ subfolder
  - home.php

home.php我想打电话

require("../base.php")

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

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

【问题讨论】:

  • 我在 Windows 上进行测试,但我将部署到 Linux 服务器
  • 在 linux 或 windows 的代码中运行?

标签: php codeigniter


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    home.php 内部调用。

    编辑:独立于平台的解决方案是:

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

    【讨论】:

      【解决方案3】:

      试试:

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

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

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

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

      echo ini_get('include_path');
      

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

      【讨论】:

      • 问题在于 PHP 中的路径总是相对于第一个文件路径,在本例中为 home.php。所以你必须包括目录'控制器'。不过也取决于 PHP 和/或服务器上的配置。
      • @BrunoLM 不要忘记为您的问题选择一个答案;)星期五快乐!
      【解决方案4】:

      在撰写本文时,接受的答案是正确的,因为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.

      【讨论】:

        猜你喜欢
        • 2014-09-11
        • 2010-09-13
        • 2013-01-26
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        • 1970-01-01
        • 2017-02-09
        相关资源
        最近更新 更多