这是我正在使用的代码(它是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),则需要该文件。
答案 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'); }