9

可能重复:
执行 PHP 文件,并将结果作为字符串返回
PHP 捕获 print/require output in variable

我正在尝试将包含的内容添加到字符串中。那可能吗?

例如,如果我有一个 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)将无法访问全局定义的变量。对于动态包含的许多脚本来说,这可能不是问题,但如果这对您来说是个问题,那么可以在函数包装器之外使用此技术(如其他人所示)。

** 导入变量 您可以做的一件事是添加一组您想作为变量公开给脚本的数据。把它想象成将数据传递给模板。

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

于 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 回答