我可以使用ob_start包含一个包含变量的外部php文件吗?

时间:2012-11-29 16:09:24

标签: php

这是可能的,如果是,我将如何通过这种方法,我真的没有得到ob_start的目的是什么,因为我没有使用这个功能,我真的不知道何时使用这个功能。< / p>

我已经在这里问了一个类似的问题,但没有得到任何答案,所以我希望通过这个更准确的问题,我现在可以更好地回答这个困境,我也明白我还有其他方法可以做这是通过SVN,但我想继续包括外部文件的方法。

谢谢。

2 个答案:

答案 0 :(得分:3)

OB(输出缓冲)系统仅影响 OUTPUT 。它捕获通常发送到远程浏览器并将其存储在内存缓冲区中的任何内容。就你的普通PHP代码而言,没有任何改变,除了输出暂时被困。

OB在某些情况下很方便,例如无论出于何种原因,你可能会产生输出,但不能将它发送出去,例如

echo 'this will break the next line';
header("Location: otherpage.php");

添加输出缓冲将允许标题重定向工作:

ob_start();
echo 'this would have broken the next line, but output has been trapped';
header("Location: otherpage.php");
echo ob_get_clean(); // output actually occurs here

答案 1 :(得分:1)

正如另一张海报所提到的,ob_start对你的程序输入没有任何影响。

如果要将包含变量的PHP文件包含在单个脚本中,我建议使用require_once(http://php.net/manual/en/function.require-once.php)。这将评估当前范围内的给定PHP文件,当且仅当之前尚未评估过它。我说要使用require_once函数,因为include不会告诉你文件是否加载失败,并且结构的_once方面确保在访问多个PHP文件时你不会重新加载文件(这可能很麻烦)。 / p>

如果您希望将文件中的变量带入服务器上运行的每个php程序,请考虑php.ini指令auto_prepend_file(http://us3.php.net/manual/en/ini.core。 PHP#ini.auto-前置文件)。在评估脚本之前,该指令将为每个请求加载一个文件(很像include或require)。

如果这不是你想要的,你能澄清一下你在寻找什么吗?

编辑:评论示例

$myStringArray = file('http://somewhere.com/file.txt');  //get the file contents as an array of lines

$myEvaluationString = ''; //set up a string which we will eventually evaluate

foreach ($myStringArray as $line) {

  $myEvaluationString = "$line\n"; //loop over each line and add it to our evaluation string

}

$myEvaluationString = rtrim($myEvaluationString); //clean off the trailing newline

eval($myEvaluationString); //evaluate the string