【问题标题】:Error setting include path错误设置包括路径
【发布时间】:2011-12-28 01:25:26
【问题描述】:

这是我正在使用的代码(它是 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(在本地主机中);我不确定客户__DIR__ 是否有很大不同,因为我一开始对路径一无所知。我刚刚写了前几行,以便轻松地从 DIR 中删除最后两个文件夹,所以我确信无论__DIR__ 是什么路径都是正确的。我在另一个测试设置中测试了这些行,它们工作正常。

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

【问题讨论】:

    标签: php require dir


    【解决方案1】:

    您可以使用 $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'); }
    

    【讨论】:

    • 我应该如何使用它?此时设置ini包含路径配置没有任何意义。
    • 确实,现在使用 ini 包含路径配置有点多余。也许您应该只 require() 所需的文件,并使用 set_error_handler 定义错误处理程序以进行自定义错误管理。
    • 感谢 dirname() 的事情和建议。我完全忘记了 dirname() 函数。 :)
    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多