除此之外,是否有其他方法可以“确定应用程序基本目录”?

时间:2019-05-30 20:39:59

标签: php

我已经制作了一个PHP框架。要启动它,请执行以下操作:

require 'framework.php';
framework_start(__DIR__);

如果可能的话,我正在尝试删除__DIR__部分。它告诉框架应用程序的“基本目录”是什么。我想不出任何办法从__DIR__内部为调用framework_start()的文件确定“ framework_start()”。

我不禁为它不能只是而感到烦恼:

require 'framework.php';
framework_start();

...,然后framework_start();自行找出__DIR__的值。但是,如果我只是从包含__DIR__的PHP文件中引用framework_start(),显然它将返回错误的目录路径。

这有可能吗?如果可以,怎么办?

1 个答案:

答案 0 :(得分:2)

我建议以下内容。在framework.php文件顶部定义一个常量,以代替__DIR__在框架中使用:

$trace = debug_backtrace(false);
$levelsToGoUp = 0; // set to 1 if called from within the function 
if (array_key_exists($levelsToGoUp, $trace)) {
    define('PARENTFILE', dirname($trace[$levelsToGoUp]['file']));
} else {
    define('PARENTFILE', __DIR__);
}

如果您在函数debug_backtrace()中调用了framework_start(),则需要查看数组中键为1的条目(第一个是函数本身),我建议这样做。