PHP - 构建包含/需要树

时间:2014-04-15 23:09:00

标签: php parsing tree

目前我正在解析PHP代码并且可以构建一个include / require和函数树:通过include / require树我的意思是一棵树,其中很明显哪个文件包含其他文件 - 这里我要注意for循环,但它可行。假设我有一个文件a.php,其中包含b.php和c.php,而c.php则包含d.php,树应该以显示层次结构的方式构造。

如果可以对函数执行此操作也是很好的,其中一个函数调用第二个函数,而第二个函数又调用第三个函数。

我的问题是这样的工具或脚本是否已经可用,因为我并不需要任何花哨的东西,但另一方面我不想重新发明轮子。

2 个答案:

答案 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 ;; }