2012-04-13 11 views
8

可能性の重複:
Execute a PHP file, and return the result as a string
PHP capture print/require output in variableコンテンツを文字列として取り込む方法は?

私は文字列に含まれるの内容を取得しようとしています。それは可能ですか?例えば

私はtest.phpをファイルしている場合、:

<?php 
echo 'a is equal to '.$a; 
?> 

を私はtest.phpをが含まれており、文字列内でのことで、出力がどうなるかを返すためにinclude_to_string言う、機能を必要としています。以下のような

何か:

<?php 
$a = 4; 
$string = include_to_string(test.php); // $string = "a is equal to 4" 
?> 
+0

私の推測では、それはつもりはないということです@safarovは、私はそれがtest.phpをファイルに$を代用しないだろうと思い –

+0

彼の変数を評価します。私にチェックさせてください。 – ppp

答えて

28
<?php 

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

私が思うには、何をしたいです。 output bufferingを参照してください。

+1

このテクニックは、好奇心を抱く人には出力バッファリングと呼ばれます。 –

+0

@ Xeon06あなたがコメントを書いている間に手作業のリンクを追加しました!しかし、気をつけてください:-) – DaveRandom

+0

@nickb [いいえ](http://php.net/manual/en/function.ob-get-clean.php)、 'ob_end_clean()'は 'bool '。 'ob_get_clean()'は '$ str = ob_get_contents();を呼び出すためのショートカットです。 ob_end_clean(); ' – DaveRandom

5
ob_start(); 
include($file); 
$contents = ob_get_contents(); // data is now in here 
ob_end_clean(); 
3

あなたはoutput bufferingでこれを行うことができます。

function include2string($file) { 
    ob_start(); 
    include($file); 
    return ob_get_clean(); 
} 

@DaveRandomは機能でこれを包むの問題は、あなたのスクリプト($ファイル)へのアクセス権を持っていないということであることを(正しく)指摘変数はグローバルに定義されます。これは動的に含まれる多くのスクリプトでは問題にはならないかもしれませんが、それが問題の場合は、この手法を関数ラッパーの外で使用することができます。

**変数のインポート あなたが行うことができることの1つは、スクリプトに公開する一連のデータを変数として追加することです。データをテンプレートに渡すように考えてください。

include2string('foo.php', array('key' => 'value', 'varibleName' => $variableName)); 

、今$key$variableNameがあなたのfoo.phpファイル内の目に見えるようになります:

function include2string($file, array $vars = array()) { 
    extract($vars); 
    ob_start(); 
    include($file); 
    return ob_get_clean(); 
} 

あなたはこのようにそれを呼び出します。

スクリプトに「インポート」するグローバル変数のリストを提供することもできます。

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.phpfooはなく、booを見ることができるはずです。

+0

関数内でラップする問題は可変スコープです... – DaveRandom

+0

@DaveRandom、good call。 – Prestaul

+0

これは私が間違っていたことです。別の答えでこのメソッドに遭遇しましたが、変数が関数の範囲外で宣言されているため、宣言されていない変数エラーが発生しました。 – ppp

0

また、これを以下でも使用できますが、上記の回答をお勧めします。PHPマニュアルで

// 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; 

機能:file_get_contents

+0

これは内容を取得しますが、インクルードでPHPを実行せず、生のPHPコードを返します。 – MrCode

+0

本当に、私はOPの投稿でキーワード実行を見ていない...私は質問を誤解している可能性があります。 –

+0

@MrCode私はあなたが 'eval()'(evil)することができると思いますが、関数内で変数のスコープの問題を抱えていて、 'include()'だけでなく、最初の場所 – DaveRandom

関連する問題