我需要一些帮助来解决我面临的问题。 我在网上看,但我发现了更多通常无法解决的问题。
主要思想是从父文件中运行PHP函数,如get_included_files()
,get_defined_vars()
,debug_backtrace()
。
在我的代码中我有一个PHP文件,让我们称之为A.php,其中包含另一个PHP文件,让我们说B.php。
我想在B.php中运行例如get_included_files()
来获取A.php中包含的文件。
类似于parent ::但是对于PHP文件而不是面向对象编程。 我知道这可能是一个安全漏洞,这就是为什么我不确定它是否可能,但我要求确定。
为了尽可能最清楚,这是一个例子:
a.php只会
include 'B.php';
include 'C.php';
include 'D.php';
get_includes();
B.php
function get_includes()
{
$included_files = get_included_files();
print_r($included_files);
}
我需要$included_files
var来包含array('B','C','D')
。
我的问题是PHP函数从它启动的文件中获取包含的文件,而不是从父文件中获取(使用此代码,$included_files
为空)。
答案 0 :(得分:1)
php是一个解释器,解释将是字符串。因此文件a.php尝试按以下顺序包含文件:
include 'С.php';
include 'D.php';
include 'B.php';
答案 1 :(得分:0)
考虑一下这个例子:
a.php只会
function a(){
echo "a";
}
function b(){
echo "b";
}
b.php
include "a.php";
echo a();//echoes a
echo b();//echoes b
答案 2 :(得分:0)
我不知道它是否可以解决您的问题,但您也可以在父文件中执行这些功能,将结果分配给变量,并在包含的文件中读取此变量。
例如:
a.php只会
$a = 1;
$files = get_included_files();
$vars = get_defined_vars();
include 'B.php';
$b = 2;
$files = get_included_files();
$vars = get_defined_vars();
include 'C.php';
B.php
echo 'B<br /><pre>';
print_r($files);
print_r($vars);
echo '</pre>';
C.php
echo '<br />C<br /><pre>';
print_r($files);
print_r($vars);
echo '</pre>';
它将提供如下所示的输出:
B
Array
(
[0] => A.php
)
Array
(
[...]
[a] => 1
[files] => Array
(
[0] => A.php
)
)
C
Array
(
[0] => A.php
[1] => B.php
)
Array
(
[a] => 1
[files] => Array
(
[0] => A.php
[1] => B.php
)
[vars] => Array
[...]
[b] => 2
)
请注意,您无法获得有关调用函数后包含/定义的文件和变量的信息,因此无论如何从B.php中您都无法知道C.php和D.php将在稍后加入。