Php 从库中查找调用方脚本路径

Php 从库中查找调用方脚本路径,php,Php,当执行包含库的脚本时,我不想从库中找到调用方脚本,在Perl中,我使用env:$0,它提供调用方脚本的路径。在PHP\uuuu文件中,文件给了我当前脚本,所以在库中它给了我库路径,而不是调用方脚本路径 来自perl文档:$0包含包含正在执行的perl脚本的文件名。 我认为可以使用debug_backtrace()完成,但还有另一种更好/更短的方法吗 编辑:(添加示例代码) 文件:index.php <?php require 'locallib.php'; echo 'in origina

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

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

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

编辑:(添加示例代码)

文件:index.php

<?php
require 'locallib.php';
echo 'in original script = '.__FILE__.'<br />';
?>

文件:locallib.php

<?php
require "lib.php";
echo 'in library "'.__FILE__.'"<br />';
?>

文件: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>';
}
?>


.

您是否尝试过以下任一方法:

function php_self(){
  $bt = debug_backtrace();
  return $bt[count($bt)-1]['file'];
}

从控制台调用PHP脚本时未设置$\u服务器数组

我发现使其在网页和控制台脚本中都能工作的唯一方法是使用以下功能:


发布您的示例代码,看看您的确切意思。+1适用于主调用方脚本。如果存在嵌套的包含,则不起作用,但好吧,这些都不起作用-甚至回溯也不起作用。
$_SERVER['SCRIPT_FILENAME'];
$_SERVER['PHP_SELF'];
function php_self(){
  $bt = debug_backtrace();
  return $bt[count($bt)-1]['file'];
}