0

这可能吗?如果可以,我将如何采用这种方法,我真的不明白 ob_start 的目的是什么,因为我没有使用过这个函数,我也不知道什么时候使用这个函数。

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

谢谢你。

4

2 回答 2

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
于 2012-11-29T16:18:05.867 回答
1

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

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

如果您希望将文件中的变量引入服务器上运行的每个 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
于 2012-11-29T16:24:51.213 回答