目前我正在解析PHP代码并且可以构建一个include / require和函数树:通过include / require树我的意思是一棵树,其中很明显哪个文件包含其他文件 - 这里我要注意for循环,但它可行。假设我有一个文件a.php,其中包含b.php和c.php,而c.php则包含d.php,树应该以显示层次结构的方式构造。
如果可以对函数执行此操作也是很好的,其中一个函数调用第二个函数,而第二个函数又调用第三个函数。
我的问题是这样的工具或脚本是否已经可用,因为我并不需要任何花哨的东西,但另一方面我不想重新发明轮子。
答案 0 :(得分:0)
我在想,也许你可以使用像REGEX这样的东西来解析PHP文件(不确定是否有类似于DOMDocument for PHP的东西会让它更容易),它可以获取任何include或require的内容。像这样:
function make_tree($php_file){
//specify output file
$output = ""
//set counter
$counter = 1;
//make REGEX or other parsing array of
//all the include, include_once,
//require, and require_once elements
foreach($regex_array[] as $url){
$output .= $counter . ": Page included/required " . $url . ".";
//run make_tree on subpage
make_tree($url);
//increment counter
$counter = $counter + 1;
}
//output the output
return $output;
}
这非常粗糙,可能需要一些修改,但它似乎应该有效。样本输出:
1: Page included/required first_require.php. //required by your first document
1: Page included/required req1.php //required by first_require.php
2: Page included/required req2.php //required by first_require.php
1: Page included/required penguin.php //required by req2.php
3: Page included/required req3.php //required by first_require.php
有些主要问题可能会被嵌套数组修复,但我现在还不确定如何实现它。
答案 1 :(得分:0)
PHP内置函数get_included_files()似乎对这种情况最有用。例如:
$ included_files = get_included_files();
foreach($ included_files as $ filename){ echo" $ filename \ n&#34 ;; }