如何从来电者

时间:2016-09-03 12:28:02

标签: php

这只是解释的例子。

[./includes/functions.inc.php]
function getPHPResult($path) {
    ob_start();
    include $path;
    $result = ob_get_clean();

    return $result;
}

[./pages/a.php]
echo getPHPResult('b.php');

[./pages/b.php]
some php code.

此代码不起作用 因为a.php中的'b.php''getPHPResult'中不是有效路径。

如果我在a.php中使用include 'b.php',则会加载与a.php在同一目录中的b.php。 但是,如果我在a.php中使用getPHPResult ('b.php'),则会加载与functions.inc.php相同的目录中的b.php。 但我想用a.php

在同一目录中加载b.php

所以,我应该将getPHPResult('b.php')更改为getPHPResult('../includes/b.php') 但是,如果将a.phpb.php移动到其他目录,它将无效。

然后,我想在getPHPResult函数中找到正确的路径 我的解决方案就是使用debug_backtrace

function getPHPResult($path) {
    $backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 2);
    $dir = dirname($backtrace[1]['file']);

    ob_start();
    include $dir . '/' . $path;
    return ob_get_clean();
}

但是,我认为这不是好方法 如何在没有debug_backtrace的情况下找到正确的路径?

3 个答案:

答案 0 :(得分:1)

我不明白你的意思。但是如果你想获得当前正在执行的php脚本的文件名,请使用

echo $_SERVER['PHP_SELF'];

答案 1 :(得分:0)

如果脚本的位置可能会改变,那么也许你应该尝试使用绝对路径而不是相对路径。在PHP中,有一些预定义的"magic constants"可以帮助您。

  

__ FILE__解析了符号链接的文件的完整路径和文件名。如果在include中使用,则返回包含文件的名称。

常量__FILE__将始终返回脚本的完整路径和文件名。也许你可以用它作为起点。

答案 2 :(得分:0)

如果a.php和b.php位于同一目录中,您可以安全地使用以下内容:

[a.php只会]

echo getPHPResult(__DIR__ . '/b.php');