Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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中生成一个PHP?_Php_Refactoring_Include_Preprocessor - Fatal编程技术网

如何内联PHP包含/需要,或从多个PHP中生成一个PHP?

如何内联PHP包含/需要,或从多个PHP中生成一个PHP?,php,refactoring,include,preprocessor,Php,Refactoring,Include,Preprocessor,我正在尝试分析/重构/重写一个复杂的PHP站点。虽然我可以处理单独的文件,但我希望将所有内容合并到一个文件中,这样我就可以在不在文件之间跳转的情况下了解上下文 PHP(可执行文件)或其他工具有什么方法可以 “内联”包含,将结果作为一个PHP文件返回 我意识到PHP不会预处理includes,而是在遇到includes文件时执行其内容 本质上,我是在寻找结果,就好像PHP预处理在执行之前包含和需要一样 编辑:基于Dan Grossman以下建议的工作解决方案。不幸的是,我使用的代码库对inclu

我正在尝试分析/重构/重写一个复杂的PHP站点。虽然我可以处理单独的文件,但我希望将所有内容合并到一个文件中,这样我就可以在不在文件之间跳转的情况下了解上下文

PHP(可执行文件)或其他工具有什么方法可以 “内联”包含,将结果作为一个PHP文件返回

我意识到PHP不会预处理includes,而是在遇到includes文件时执行其内容

本质上,我是在寻找结果,就好像PHP预处理在执行之前包含和需要一样


编辑:基于Dan Grossman以下建议的工作解决方案。不幸的是,我使用的代码库对include()做了一些巧妙的操作,但这是一个很好的开始

<?php

function combinePhpFile($input) {

    $myFile = file_get_contents($input[2]);
    $myFile = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'combinePhpFile', $myFile);    
    return $myFile;

}
// preg_replace_callback wants an array? It GETS an array!
$result = combinePhpFile(array("dummy", "dummy", "index.php"));
file_put_contents("result.txt", $result);
?>
包含了类/函数,您应该能够通读文件。它在那里被称为“编译器”。它将包含所有文件,并将其移动到一个.php文件中

它可能会帮助您

包含类/函数,您应该能够通读文件。它在那里被称为“编译器”。它将包含所有文件,并将其移动到一个.php文件中


它可能会帮助您编写自己的预处理器,这应该不难。这是一个递归函数。该函数将.php文件作为其参数,将文件读入字符串(file_get_contents),搜索任何include/require语句并将其替换为文件的内容(preg_replace_callback,其中回调是该函数,包含的文件名作为其参数),然后将内容作为字符串返回。递归调用将解析包含在包含文件中的include等,最终得到一个字符串,并将其写入一个新的PHP文件(file_put_contents)


非递归方法是编写一个函数,该函数只查找include/require,打开包含的文件并用其内容替换include/require。在以前的输出上循环调用此函数,直到两次迭代的输出相同,并且您知道已替换了所有包含项。

编写自己的预处理器,这应该不难。这是一个递归函数。该函数将.php文件作为其参数,将文件读入字符串(file_get_contents),搜索任何include/require语句并将其替换为文件的内容(preg_replace_callback,其中回调是该函数,包含的文件名作为其参数),然后将内容作为字符串返回。递归调用将解析包含在包含文件中的include等,最终得到一个字符串,并将其写入一个新的PHP文件(file_put_contents)


非递归方法是编写一个函数,该函数只查找include/require,打开包含的文件并用其内容替换include/require。在以前的输出上循环调用此函数,直到两次迭代的输出相同,并且您知道您已经替换了所有包含项。

很好的解决方案。你打了我+1花点时间来解决这个问题(我是PHP新手),但我得到了你的建议!非常感谢。嗯,很好的解决方案。你打了我+1花点时间来解决这个问题(我是PHP新手),但我得到了你的建议!非常感谢。谢谢,这不完全符合我的需要,但帮助我理解丹·格罗斯曼的建议。谢谢,这不完全符合我的需要,但帮助我理解丹·格罗斯曼的建议。