我的功能有:
ob_start();
//Include of some files
$content = ob_get_contents();
ob_end_clean();
Run Code Online (Sandbox Code Playgroud)
现在在那些包含是另一个使用相同代码的函数,它们似乎发生冲突.有可能像这样使用它们吗?
我希望在长时间的导入操作中使用ob_start()/ ob_flush()to,给我一些进展.
以下是我正在做的简单概述:
<?php
ob_start ();
echo "Connecting to download Inventory file.<br>";
$conn = ftp_connect($ftp_site) or die("Could not connect");
echo "Logging into site download Inventory file.<br>";
ftp_login($conn,$ftp_username,$ftp_password) or die("Bad login credentials for ". $ftp_site);
echo "Changing directory on download Inventory file.<br>";
ftp_chdir($conn,"INV") or die("could not change directory to INV");
// connection, local, remote, type, resume
$localname = "INV"."_".date("m")."_".date('d').".csv";
echo "Downloading Inventory file to:".$localname."<br>";
ob_flush();
flush();
sleep(5);
if (ftp_get($conn,$localname,"INV.csv",FTP_ASCII))
{
echo "New Inventory File Downloaded<br>";
$datapath = $localname; …Run Code Online (Sandbox Code Playgroud) 当我ob_flush()在我的localhost(通过MAMP)上调用PHP的函数时,我收到以下错误:
注意:ob_flush()[ref.outcontrol]:无法刷新缓冲区.没有缓冲区要冲洗.
我能找到的唯一解决方案就是用它作为前缀@,但这对我来说似乎不是一个真正的解决方案.是什么导致了这个问题?
php文档建议我应该用ob_end_flush()结束每个ob_start().我在网站的每个页面上使用一个,只是为了允许我在应用程序的任何地方使用firephp日志方法.
该应用程序工作正常,但我想知道是否有任何我不知道可能有害的事情.
我重新安装了Apache,并从PHP 5.3切换到5.6.一切正常,但我得到这个错误,当调用ob_start():
Cannot use output buffering in output buffering display handlers
Run Code Online (Sandbox Code Playgroud)
我试图在PHP中启用输出缓冲,但我仍然收到此错误:
output_buffering = 4096
Run Code Online (Sandbox Code Playgroud) 我不认为这是合理的.
为什么它实际上是这样的规则?
我遇到了ob_start的问题.不知道这笔交易是什么,但我已经把它归结为最简单的测试案例......但仍无济于事.我希望这段代码能够输出'bar'到stdout,但是我什么也没收到,错误日志中没有错误.
<?php
function gzhandler_ex($buffer, $mode)
{
echo 'bar';
}
ob_start('gzhandler_ex');
echo 'foo';
ob_flush();
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这个,但我通常不会使用这样的回调.
前提:我不是要重新发明轮子,我只是想了解一下.
输出缓存可以轻松实现:
//GetFromMyCache returns the page if it finds the file otherwise returns FALSE
if( ($page = GetFromMyCache($page_id)) !== FALSE )
{
echo $page; //sending out page from cache
exit();
}
//since we reach this point in code, it means page was not in cache
ob_start(); //let's start caching
//we process the page getting data from DB
//saving processed page in cache and flushing it out
echo CachePageAndFlush(ob_get_contents());
Run Code Online (Sandbox Code Playgroud)
但接下来是APC (默认情况下将包含在PHP6中).
APC是否曾经安装在服务器上的模块,现有的 PHP代码运行速度更快, …
我在使用event_()循环和使用ob_start()和ob_get_clean()循环内部时遇到问题.
这是我的功能:
protected function renderEmail() {
$template = $this->_case.".php";
if(is_file($this->_dir.DS.$template)) {
ob_start();
if(!empty($this->_records)) {
foreach($this->_records as $key => $value) {
${$key} = $value;
}
}
require_once($this->_dir.DS.$template);
return ob_get_clean();
} else {
$this->_errors[] = "Email template not found";
return false;
} }
Run Code Online (Sandbox Code Playgroud)
此功能基本上生成电子邮件的内容,然后返回它.
我遇到的问题是当我遍历多个电子邮件地址 - 发送相同的电子邮件内容时 - 只有第一个返回内容 - 以下是空白 - 任何想法为什么?
我刚看到这里的链接与我的问题几乎相同,但我想确保理解.这是链接: ob_start()在这里的作用是什么
所以,他的代码没有真正的"输出" - 没有回声,没有HTML,几乎没有.但他有一个ob_start.我和他一样,是传统代码,我的没有输出.它只是更新一些表.我在这个链接中看到的所有答案都解决了ob_start的实际功能 - 我认为只有一个解决了他的真正问题,即"这个代码中ob_start的作用是什么?".那么,如果代码是"幕后"脚本,不输出html或回声或其他任何东西,输出缓冲区的东西是不是没用?谢谢