2011-07-15 16 views
0

我试图分析/重构/重写一个复杂的PHP网站。虽然我可以使用单独的文件,但我想将所有内容合并到一个文件中,以便我可以在不跳转文件的情况下找出上下文。你如何内联PHP包含/需要,或从几个生成一个PHP?

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

我意识到PHP不会进行预处理,而是在遇到它时执行包含文件的内容。

本质上我正在寻找结果就好像 PHP预处理包括并要求在执行之前。


编辑:基于以下丹·格罗斯曼的建议可行的解决方案。不幸的是,我正在从事的代码库使用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); 
?> 

回答

3

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

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

+0

好,很好的解决方案。你殴打我。 +1 – genesis

+0

花了一段时间弄清楚了这一点(我是PHP新手),但我的建议工作正常!非常感谢。 –

1

adminer已包含类/函数,您应该可以通读文件。那里叫做“编译器”。它需要的所有文件与包括并将其移动到一个单一的PHP文件

它可以帮助你

+0

谢谢,这不是我所需要的,但帮助我找出丹格罗斯曼的建议。 –