如何将PHP包含定义为字符串?

时间:2010-01-27 20:58:25

标签: php include

我试过了:

$test = include 'test.php';

但通常只包含文件

6 个答案:

答案 0 :(得分:30)

您需要查看输出缓冲功能。

//get anything that's in the output buffer, and empty the buffer
$oldContent = ob_get_clean();

//start buffering again
ob_start();

//include file, capturing output into the output buffer
include "test.php";

//get current output buffer (output from test.php)
$myContent = ob_get_clean();

//start output buffering again.
ob_start();

//put the old contents of the output buffer back
echo $oldContent;

修改

正如Jeremy指出的那样,输出缓冲区堆栈。所以理论上你可以做类似的事情:

<?PHP
function return_output($file){
    ob_start();
    include $file;
    return ob_get_clean();
}
$content = return_output('some/file.php');

这应该等同于我更详细的原始解决方案。

但我没有费心去测试这个。

答案 1 :(得分:10)

尝试类似:

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

答案 2 :(得分:8)

尝试file_get_contents()

  

此函数类似于file(),但file_get_contents()以字符串形式返回文件。

答案 3 :(得分:5)

解决方案#1:使用include(像函数一样工作):[我的最佳解决方案]

文件index.php:

<?php
$bar = 'BAR';
$php_file = include 'included.php';
print $php_file;
?>

文件included.php:

<?php
$foo = 'FOO';
return $foo.' '.$bar;
?>
<p>test HTML</p>

这将输出FOO BAR,但是 注意:像函数一样工作,因此 RETURN 将内容传递回变量(<p>test HTML</p>将在上面丢失)


解决方案#2: op_buffer():

文件index.php:

<?php
$bar = 'BAR';
ob_start();
include 'included.php';

$test_file = ob_get_clean(); //note on ob_get_contents below
print $test_file;
?>

文件included.php:

<?php
$foo = 'FOO';
print $foo.' '.$bar;
?>
<p>test HTML</p>

如果您使用ob_get_contents(),则会输出FOO BAR<p>test HTML</p> TWICE ,请务必使用ob_get_clean()


解决方案#3: file_get_contents():

文件index.php:

<?php
$bar = 'BAR';
$test_file = eval(file_get_contents('included.php'));

print $test_file;
?>

文件included.php:

$foo = 'FOO';
print $foo.' '.$bar;

这将输出FOO BAR,但是注意:当您通过eval()

运行时,Include.php不应该有<?php个开始和结束标记

答案 4 :(得分:0)

其他答案,由于我不知道的原因,没有达到正确的解决方案。

我建议使用缓冲区,但你必须获取内容,然后在页面结束前清理缓冲区,否则输出。如果您希望使用包含文件的输出,您应该使用op_get_contents(),它将返回缓冲区内容的字符串。

你也不需要遍历包含,因为每个只会添加到缓冲区(除非你先清理它)。

因此,您可以使用以下内容;

ob_start();
include_once('test.php');
include_once('test2.php');
$contents = ob_get_contents();
ob_end_clean();

希望这有帮助。

答案 5 :(得分:-1)

您可以使用file_get_contents功能。