这只是解释的例子。
[./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
所以,我应该将getPHPResult('b.php')
更改为getPHPResult('../includes/b.php')
但是,如果将a.php
和b.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
的情况下找到正确的路径?
答案 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');