Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP输出缓冲区的开头添加内容?_Php_Output Buffering - Fatal编程技术网

如何在PHP输出缓冲区的开头添加内容?

如何在PHP输出缓冲区的开头添加内容?,php,output-buffering,Php,Output Buffering,如何在输出缓冲区的开头添加内容 例如,假设您有以下代码: ob_start(); echo '<p>Start of page.</p>'; echo '<p>Middle of page.</p>'; echo '<p>End of page</p>'; ob_start(); 回显“页面的开头。”; 回显页面中间的“”; 回显“页面的末尾”; 在将内容刷新到浏览器之前,如何添加内容,使其显示在页面开始之前。加载页面

如何在输出缓冲区的开头添加内容

例如,假设您有以下代码:

ob_start();

echo '<p>Start of page.</p>';
echo '<p>Middle of page.</p>';
echo '<p>End of page</p>';
ob_start();
回显“页面的开头。

”; 回显页面中间的“”; 回显“页面的末尾”

在将内容刷新到浏览器之前,如何添加内容,使其显示在页面开始之前。

加载页面时


这听起来很简单,就像将指针移到数组的开头,但我找不到如何使用输出缓冲区。

在要首先显示的内容之后使用2个ob_start命令和ob_end_flush(),然后在要输出页面的其余部分时再次使用ob_end_flush结束缓冲区

例如:

ob_start();
ob_start();
回显“页面的开头。

”; ob_end_flush(); 回显页面中间的“”; 回显“页面的末尾”

; ob_end_flush();
请参阅
ob_start
(文档)的第一个参数,它允许您提供一个回调,以便在缓冲区被刷新时调用。它接收一个字符串作为参数并输出一个字符串,因此应该很容易

function writeCallback($buffer)
{
    return "Added before " . $buffer;
}

ob_start("writeCallback");
**PHP5.3**

ob_start(function($output) {
    $output = '<p>Prepended</p>'.$output;
    return $output;
});

echo '<p>Start of page.</p>';
echo '<p>Middle of page.</p>';
echo '<p>End of page</p>';
ob_启动(功能($output){
$output='prepend

'.$output; 返回$output; }); 回显“页面的开头。

”; 回显页面中间的“”; 回显“页面的末尾”

**PHP<5.3**

function prependOutput($output) {
    $output = '<p>Appended</p>'.$output;
    return $output;
}

ob_start('prependOutput');

echo '<p>Start of page.</p>';
echo '<p>Middle of page.</p>';
echo '<p>End of page</p>';
函数预输出($output){
$output='追加的

。$output; 返回$output; } ob_开始(“预输出”); 回显“页面的开头。

”; 回显页面中间的“”; 回显“页面的末尾”


您可以使用函数获取缓冲区的内容


你想在任何输出之前得到它吗?如果是这样,那么您正在寻找
auto\u prepend\u文件
指令

我不知道为什么一个问题同时被标记为“PHP”和“指针”…@H2CO3:如果它让人困惑,请编辑掉。我之所以添加它,是因为我提到在数组中移动指针作为类比。您要查找的单词是“prepend”。“Append”的意思是“在结束后添加”,而“prepend”的意思是“在开始之前添加”。我想你的意思是prepend:-)我不明白这是怎么回事。您编写的代码在代码的其余部分之前进行预结束,但您能否提供一个示例,说明您是如何使用出现在“页面”代码的其余部分之后的代码(例如,开始、中间、页面结束)进行预结束的?换言之:调用
ob\u Start
时,这是否会执行函数
appendOutput
,或者在缓冲区刷新之前的最末端?这是非常重要的,因为我需要在该函数中的代码在页面的最后执行,而不是在开始执行。@程序员是的,它将在刷新到浏览器之前执行,根据参数output_callbackCorrect下的参考文档,然后再输出到浏览器,但是,您可以提供一个如何工作的示例吗?您可以在php.ini文件中创建一个配置变量,指定
auto\u prepend\u file=/path/to/whatever.php
。在给定页面上进行任何处理之前,先处理
which.php
。请参阅我链接到的页面上的文档。这个解决方案很容易理解,但是将整个内容刷新到一个变量是否最终会使用更多的RAM,或者这不是一个问题?我问这个问题是因为我将在网站的很多页面和最活跃的区域之一使用它,所以我想确保将所有内容放入一个变量不会突然使RAM的使用量翻倍。如果你想清理当前缓冲区以减少内存使用,你可以调用$out1=ob_get_flush();当调用
ob\u start
时,或者在缓冲区刷新之前的最后执行函数
writeCallback
?这是非常重要的,因为我需要在函数中的代码在最后执行,而不是在开始执行。在最后,您将拥有完整的缓冲区!
function prependOutput($output) {
    $output = '<p>Appended</p>'.$output;
    return $output;
}

ob_start('prependOutput');

echo '<p>Start of page.</p>';
echo '<p>Middle of page.</p>';
echo '<p>End of page</p>';
ob_start();
echo "World! ";
$out1 = ob_get_contents();
echo "Hello, ".$out1;