错误设置包括路径

时间:2011-11-13 13:50:38

标签: php require dir

这是我正在使用的代码(它是index.php文件)

/* Set an include path
*/
$dir = explode('/', __DIR__);
$i = count($dir);
unset($dir[$i-1], $dir[$i-2]);
$path = implode('/', $dir);
ini_set('include_path', $path);

// require('system/base/file.php'); // ***1

/* Starter file
*/
if (file_exists('system/base/file.php')) { require('system/base/file.php'); }
else { exit('Error'); }

我正在开发一个具有这种结构的框架

application/
    public/
        index.php
system/

我想将包含路径设置为root /(包含application /和system /的文件夹)。 __DIR__给了我很多诸如Application/xammp/htdocs/application/public/index.php之类的东西(在localhost中);我不确定客户__DIR__是如此不同,考虑到我首先对路径一无所知。我刚写了前几行来轻松删除 DIR 中的最后两个文件夹,所以我确信路径是正确的__DIR__。我在另一个测试环境中测试了这些线,它们工作正常。

发生的奇怪事情是,如果我运行代码,因为它显示在那里它给我“错误”。如果我只是在检查它存在之前需要system/base/file.php它是否有效。因此,如果我取消注释(*** 1),则需要该文件。

1 个答案:

答案 0 :(得分:2)

您可以使用$ path = dirname(dirname( DIR )),这将实现与前5行代码相同的操作。

根据PHP文档,include_path仅适用于:require(),include(),fopen(),file(),readfile()和file_get_contents(),而不是file_exists()。因此,您必须将$ path存储在变量或常量中。例如:

/* Set an include path
*/
$path = dirname(dirname(__DIR__));
ini_set('include_path', $path);
define('PATH', $path)

// require('system/base/file.php'); // ***1

/* Starter file
*/
if (file_exists(PATH . 'system/base/file.php')) { require('system/base/file.php'); }
else { exit('Error'); }