出力バッファリングでこれを行うことができます:
function include2string($file) {
ob_start();
include($file);
return ob_get_clean();
}
@DaveRandom は、これを関数でラップする際の問題は、スクリプト ($file) がグローバルに定義された変数にアクセスできないことであると (正しく) 指摘しています。これは、動的に含まれる多くのスクリプトにとって問題ではないかもしれませんが、それが問題である場合は、関数ラッパーの外部で (他の人が示したように) この手法を使用できます。
** 変数のインポート できることの 1 つは、スクリプトに公開したい一連のデータを変数として追加することです。テンプレートにデータを渡すようなものだと考えてください。
function include2string($file, array $vars = array()) {
extract($vars);
ob_start();
include($file);
return ob_get_clean();
}
次のように呼び出します。
include2string('foo.php', array('key' => 'value', 'varibleName' => $variableName));
これで$key
、$variableName
foo.php ファイル内に表示されます。
より明確に思われる場合は、スクリプトに「インポート」するグローバル変数のリストを提供することもできます。
function include2string($file, array $import = array()) {
extract(array_intersect_key($GLOBALS, array_fill_keys($import, 1)));
ob_start();
include($file);
return ob_get_clean();
}
そして、スクリプトに公開したいグローバルのリストを提供して、それを呼び出します。
$foo='bar';
$boo='far';
include2string('foo.php', array('foo'));
foo.php
見えるはずなのに見えfoo
ないboo
。