我正在尝试分析/重构/重写一个复杂的PHP站点。虽然我可以处理单独的文件,但我想将所有内容合并到一个文件中,这样我就可以找出上下文而不会在文件之间跳转。
有没有办法使用PHP(可执行文件)或其他工具 “inline”包含,将结果作为一个PHP文件返回?
我意识到PHP不会预处理包含,而是在遇到包含文件的内容时执行它们。
基本上我正在寻找结果,好像 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);
?>
答案 0 :(得分:3)
编写自己的预处理器,应该不难。这是一个递归函数。该函数将.php文件作为其参数,将文件读入字符串(file_get_contents),搜索任何include / require语句并将其替换为文件内容(preg_replace_callback,其中回调是此函数,包含文件的名称)作为其参数),然后将内容作为字符串返回。递归调用将解析包含在包含的文件等中,并最终得到一个字符串,您将其写入新的PHP文件(file_put_contents)。
非递归方法是编写一个只查找include / require的函数,打开包含的文件并用其内容替换include / require。在前一个输出的循环中调用此函数,直到两次迭代的输出相同,并且您知道已替换所有包含。
答案 1 :(得分:1)
adminer已包含类/函数,您应该能够读取文件。它在那里被称为“编译器”。它需要包含所有文件并将其移动到一个单独的.php文件
它可能对你有帮助