Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:auto“u prepend”文件是否知道;调用脚本";_Php_Prepend - Fatal编程技术网

PHP:auto“u prepend”文件是否知道;调用脚本";

PHP:auto“u prepend”文件是否知道;调用脚本";,php,prepend,Php,Prepend,每当执行脚本时,都会在之前执行自动预结束文件 现在:我想“定制”这个自动文件,使其根据正在运行的脚本(即“跟随”auto_prepend的脚本,或者换句话说,auto_prepend的脚本)以不同的方式执行。有没有办法做到这一点,或者有人耍了个花招,他/她是如何做到这一点的 提前谢谢。没有办法做到这一点。如果没有必要,甚至不应该使用auto_prepend_文件。只需在顶部的调用脚本中包含该文件。基本上,这与使用auto_prepend_文件相同。只是你有更多的灵活性 附言:我甚至不知道你们为什

每当执行脚本时,都会在之前执行自动预结束文件

现在:我想“定制”这个自动文件,使其根据正在运行的脚本(即“跟随”auto_prepend的脚本,或者换句话说,auto_prepend的脚本)以不同的方式执行。有没有办法做到这一点,或者有人耍了个花招,他/她是如何做到这一点的


提前谢谢。

没有办法做到这一点。如果没有必要,甚至不应该使用auto_prepend_文件。只需在顶部的调用脚本中包含该文件。基本上,这与使用auto_prepend_文件相同。只是你有更多的灵活性


附言:我甚至不知道你们为什么要用自动前置文件。只要把这个该死的文件放在最上面就行了。

我现在已经在多个环境中进行了测试,至少我知道这一点

$GLOBALS['_SERVER']['SCRIPT_FILENAME']
将在普通PHP安装中保存所需的信息。您的嵌入式系统显然是一个特例,设计者甚至可能故意从PHP中删除这些信息,以挫败逆向工程

如果我下面的代码对您没有帮助,那么我认为如果不尝试对完全相同的系统进行反向工程,任何人都无法回答这个特定问题


我制作了一个函数,可以递归地查找任何全局变量中的任何文件名“.php”。尝试将其添加到自动预结束文件的开头:

function recursiveArraySearch($array,$str,$path = array(),$depth=0) {

    if ($depth>4) return;
    if (isset($path[0]) && $path[0] == 'GLOBALS') return;

    foreach ($array as $k=>$v)

        if (is_array($v)) {
            recursiveArraySearch($v,$str,array_merge($path,array($k)),$depth+1);
        } else {
            if (!is_resource($v) && strpos($v,$str) !== false) echo "\$GLOBALS['".implode("']['",array_merge($path,[$k]))."'] => $v\n";
        }

}


recursiveArraySearch($GLOBALS,'.php');
die();
(注意:它希望搜索的文件名包含小写“.php”。) 然后启动脚本,看看它显示了什么

当我进行测试时,我正在寻找“testpage.php”。在我的例子中,这是从Web服务器运行时得到的结果:

$GLOBALS['_SERVER']['PHP_SELF'] => /testpage.php
$GLOBALS['_SERVER']['SCRIPT_NAME'] => /testpage.php
$GLOBALS['_SERVER']['SCRIPT_FILENAME'] => /var/www/html/testpage.php
$GLOBALS['_SERVER']['PATH_TRANSLATED'] => /testpage.php
这是我从命令行运行它得到的结果:

$GLOBALS['argv']['0'] => /var/www/html/testpage.php
$GLOBALS['_SERVER']['PHP_SELF'] => /var/www/html/testpage.php
$GLOBALS['_SERVER']['SCRIPT_NAME'] => /var/www/html/testpage.php
$GLOBALS['_SERVER']['SCRIPT_FILENAME'] => /var/www/html/testpage.php
$GLOBALS['_SERVER']['PATH_TRANSLATED'] => /var/www/html/testpage.php
$GLOBALS['_SERVER']['argv']['0'] => /var/www/html/testpage.php

因此,在默认的PHP上,似乎有很多地方可以获取此文件名。

对不起,在我的系统上,当脚本运行时,服务器阵列不包含这样的信息,浏览器不会调用这些信息(在我的例子中,这是绝大多数。脚本是从命令行运行的?比如'php somefile.php',我不知道系统的体系结构是什么,因为没有关于体系结构的文档……它是一款在“内部”运行php服务器的家庭自动化产品。)逻辑是用PHP编程的。我对PHP文件进行编程,然后从产品界面启动它们(或者像按下灯按钮这样的事件启动它们)。我能说的是,在这种情况下,$\u服务器数组没有相应地填充。似乎我有点迷路了……PHP可以获得这些信息(如我的回答所示).虽然我同意一个人不应该在他们的项目中使用auto_prepend,但在调试/测试/反向生成/防火墙封闭源代码项目或大型开放源代码项目时,这样做很有意义,因为你不想弄乱代码,例如,每次更新时都会覆盖它。