从库中查找调用者脚本路径

Rad*_*ris 3 php

当执行包含库的脚本时,我想从库中找到调用者脚本,在Perl中我使用的是env:$0它为我提供了调用者脚本的路径.在PHP中__FILE__给我当前的脚本,所以在库中它给我的库路径而不是调用者脚本路径.

来自perl文档:$ 0包含包含正在执行的Perl脚本的文件的名称.

我认为可以使用debug_backtrace()来完成,但还有另一种更好/更短的方法吗?

编辑:( 添加示例代码)

file:index.php

<?php
require 'locallib.php';
echo 'in original script = '.__FILE__.'<br />';
?>
Run Code Online (Sandbox Code Playgroud)

file:locallib.php

<?php
require "lib.php";
echo 'in library "'.__FILE__.'"<br />';
?>
Run Code Online (Sandbox Code Playgroud)

file:lib.php

<?php
if( $_SERVER['SCRIPT_FILENAME'] != '/var/www/html/index.php')
{
    echo "Not allowed";exit;
} else 
{
    echo 'in library "'.__FILE__.'"<br />';
    echo '<pre>';
    print_r($_SERVER);
    echo '</pre>';
}
?>
Run Code Online (Sandbox Code Playgroud)

Seb*_*oli 6

从控制台调用PHP脚本时未设置$ _SERVER数组.

我发现使它在网页和控制台脚本中都能正常工作的唯一方法是使用此功能:

function php_self(){
  $bt = debug_backtrace();
  return $bt[count($bt)-1]['file'];
}
Run Code Online (Sandbox Code Playgroud)