2011-07-15 7 views
0

私は複雑なPHPサイトを分析/リファクタリング/書き換えようとしています。別々のファイルで作業することはできますが、すべてを1つのファイルにまとめることで、ファイル間をジャンプすることなくコンテキストを把握できます。PHPをインライン化するにはどうすればよいですか?

"をインライン"にして結果を1つの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

独自のプリプロセッサを書くに役立つかもしれない

を持つすべてのファイルを取り備えており、1つの.PHPファイルに移動し、それは難しいことではありません。それは1つの再帰関数です。この関数は引数として.phpファイルをとり、ファイルを文字列(file_get_contents)に読み込み、include/require文を検索してファイルの内容に置き換えます(preg_replace_callbackはコールバックがインクルードされたファイルの名前でこの関数です)。引数として)、コンテンツを文字列として返します。再帰呼び出しは、インクルードされたファイルなどの中にインクルードされ、新しいPHPファイル(file_put_contents)に書き出す1つの文字列で終わります。

非再帰的な方法は、include/requireを探し、インクルードされたファイルを開き、include/requireをその内容に置き換える関数を書くことです。 2つの繰り返しで出力が同じになり、すべてのインクルードを置き換えたことがわかるまで、前の出力のループでこの関数を呼び出します。

+0

よく、素晴らしい解決策。あなたは私を殴った。 +1 – genesis

+0

これを理解するためにしばらく時間がかかりました(私はPHPを初めて使っています)が、あなたの提案がうまくいっています!どうもありがとう。 –

1

adminerにはクラス/関数が含まれており、ファイルを読み取ることができるはずです。コンパイラと呼ばれています。それはそれはあなた

+0

これは私が必要とするものではありませんでしたが、Dan Grossmanの提案を理解するのに役立ちました。 –

関連する問題