Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.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-构建包含/要求树_Php_Parsing_Tree - Fatal编程技术网

PHP-构建包含/要求树

PHP-构建包含/要求树,php,parsing,tree,Php,Parsing,Tree,目前,我正在解析PHP代码,并将活着构建一个include/require和functions树:我所说的include/require树是指一个树,在这个树中,很明显哪个文件包含了来自其他文件的内容——在这里,我必须注意循环,但它是可行的。假设我有一个文件a.php,它依次包括b.php、c.php和c.php,进一步包括d.php,应该以显示层次结构的方式构建树 如果函数也可以这样做的话,那就太好了,其中一个函数调用第二个函数,而第二个函数又调用第三个函数 我的问题是这样的工具或脚本是否已经

目前,我正在解析PHP代码,并将活着构建一个include/require和functions树:我所说的include/require树是指一个树,在这个树中,很明显哪个文件包含了来自其他文件的内容——在这里,我必须注意循环,但它是可行的。假设我有一个文件a.php,它依次包括b.php、c.php和c.php,进一步包括d.php,应该以显示层次结构的方式构建树

如果函数也可以这样做的话,那就太好了,其中一个函数调用第二个函数,而第二个函数又调用第三个函数


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

我想也许你可以使用类似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
嵌套数组可能会解决一些主要问题,但我现在不确定如何实现它。

PHP内置函数似乎最适合这种情况。例如:

$included_files=获取包含的_文件

foreach$包含作为$filename的\u文件{ echo$filename\n;}