2011-07-15 40 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

謝謝,這不是我所需要的,但幫助我找出丹格羅斯曼的建議。 –