9

重複の可能性:
PHP ファイルを実行し、結果を文字列として返し
ます。

インクルードの内容を文字列に取得しようとしています。それは可能ですか?

たとえば、test.php ファイルがある場合:

echo 'a is equal to '.$a;

include_to_string などの関数が必要で、test.php をインクルードし、in によって出力されるものを文字列で返します。

何かのようなもの:

$a = 4;
$string = include_to_string(test.php); // $string = "a is equal to 4"
4

4 に答える 4

35
ob_start();
include 'test.php';
$string = ob_get_clean();

私はあなたが望むものだと思います。出力バッファリングを参照してください。

于 2012-04-13T15:58:11.537 に答える
6
ob_start();
include($file);
$contents = ob_get_contents(); // data is now in here
ob_end_clean();
于 2012-04-13T15:58:27.170 に答える
3

出力バッファリングでこれを行うことができます:

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$variableNamefoo.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

于 2012-04-13T15:58:31.307 に答える
0

以下でもこれを使用できますが、上記の回答をお勧めします。

// How 1th
$File = 'filepath';
$Content = file_get_contents($File);

echo $Content;

// How 2th  
function FileGetContents($File){
    if(!file_exists($File)){
        return null;
    }

    $Content = file_get_contents($File);
    return $Content;
}

$FileContent = FileGetContents('filepath');
echo $FileContent;

PHPマニュアルの関数:file_get_contents

于 2012-04-13T16:03:38.777 に答える