我试过了:
$test = include 'test.php';
但通常只包含文件
答案 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()
,但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()
<?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
功能。