【问题标题】:Included file thinks its in the root, while its in a sub folder包含的文件认为它在根目录中,而它在子文件夹中
【发布时间】:2014-01-14 10:47:12
【问题描述】:

我正在使用最新版本的 CodeIgniter。在我的应用程序中,我必须包含一个 PHP 文件,例如“example.php”。我真的需要这个文件,因为将它重写为 CI 需要很长时间。 include 只是用来在框架中包含一些旧的东西。

要点:包含工作正常,但包含的文件认为它在根目录中,而实际上它在子文件夹中。

文件应该在:foo/bar/example.php。 尽管如此,该文件确实有效,但在该文件中我还必须包含其他文件。

尝试过的事情:

  1. 通过基本 url(而不是 ../../secondInclude.php)在 example.php 中包含 include
  2. 此时它可以找到第二个包含,但它给出了一个很大的浏览器错误(与服务器的连接丢失);
  3. 尝试了 PHP chdir,但结果与第 2 点相同。

我不确定这是 CI 问题,还是我的服务器 (IIS7) 或其他问题。

【问题讨论】:

  • 到目前为止您尝试过什么? __ DIR __ 和类似的 PHP 魔术常量的输出是什么?
  • 首先不要使用“文件认为”之类的术语。其次显示您尝试过的代码。
  • 就像我说的,当前目录的输出是根文件夹,而它应该是2个子文件夹。我尝试的代码非常简单:从 CI 控制器包含到 example.php(这有效)。 example.php 然后在根目录中说它(而它不是),并且在 example.php 中包含到其他文件根本不起作用。如果我使用 ../../foo.php 之类的路径(在 example.php 中),它会说找不到它。如果我使用来自根目录的路径,例如:=base_url()?>.'folder1/folder2/bar.php,那么我会从浏览器获得“连接丢失”。

标签: php codeigniter iis-7 include include-path


【解决方案1】:

包含 FIle 时查看根 index.php 文件

// Path to the system folder
define('BASEPATH', str_replace("\\", "/", $system_path));

// Path to the front controller (this file)
define('FCPATH', str_replace(SELF, '', __FILE__));

// Name of the "system folder"
define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));

 // The path to the "application" folder
 define('APPPATH', $application_folder.'/');

所以如果您要包含的文件在application/ 目录中

使用APPPATH.'path/to/file'.EXT;

另一个例子

假设您在应用程序目录内的新目录中创建了一个新文件; application/custom_folder/custom_file.php

要包含此文件,您需要确定文件所在的位置,

然后使用上面定义的PATH

所以要包含你必须使用

APPPATH.'custom_folder/custom_file'.EXT.EXT 就是 PHP

【讨论】:

    【解决方案2】:

    假设您包含的文件保存在视图中的 includes 文件夹中

    然后您可以轻松地包含这些文件:

    $this->load->view('includes/example.php');
    

    include 'includes/example.php'; // in Core PHP
    

    【讨论】:

    • 包含本身有效。问题是,这个包含的文件说它在根目录中,而它在子文件夹中。这会导致该文件中的其他包含出现问题,因为它们无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2013-06-21
    • 2021-12-17
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多