问题标签 [ob-start]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 如何优雅地告诉客户端传输完成,以便浏览器立即显示页面?
问候伙计们,
我正在研究我的 php 框架。它有一个响应管理器来包装 php 的标头、cookie 和缓冲区函数。我用它来向用户发送结果页面。
但是,即使已经使用 ob_start -> ob_end_flush -> flush 发送了页眉和内容,浏览器仍然挂起并等待脚本完成。
当我想做一些缓慢的工作(例如更新当前用户的会话或只是发送邮件或上传某些内容)时,它会导致问题。用户将不得不等到一切都完成,即使他们已经拥有包括标题在内的整个页面。
我想知道的是,如何让浏览器知道页面已经完全加载,所以它可以立即显示页面?
谢谢!
//////////////////////////////////////////////////////////////////// ////////
废弃的解决方案 1
过去,我通常使用 ob_start -> ob_end_flush -> ob_flush -> flush 的组合来解决这个问题,看起来会是这样的:
但是ob_flush 会抛出一个 E_NOTICE 说它“没有要刷新的缓冲区”。我不想通过静音这个 E_NOTICE 来解决这个问题(事实上,在我的框架中,没有办法静音任何错误)。所以这不是解决这个问题的方法。
废弃的解决方案 2
我也尝试在发送内容后关闭连接,代码将如下所示:
它可以解决问题而没有任何错误,但它带来了另一个问题:似乎客户端在收到页面后会关闭连接,当他们想要打开另一个页面时,他们必须重新连接。这将在网络上产生额外的负载。
废弃的解决方案 3
是的,有人建议我使用 fastcgi,然后使用 fastcgi_finish_request(); 但我想让我的代码在环境之间更兼容,所以它实际上不是一个选项。
php - PHP OB_START 其中双引号
我正在使用 php on_start 和 ob_get_contents 来回显 html 并存储在变量中。但是,当我 json 编码并检查输出时,它不会输出整个字符串。谁能帮忙指出我做错了什么
我只得到 json 编码输出中的结束锚标记
php - 使用 ob_start 和 ob_end_flush 在全局文件中包含 CSS
我globals.php
网站上的每个文件中都包含一个文件。我想在这个文件中包含一个CSS
文件globals.css
.
问题是,如果我添加 CSSglobals.php
然后将其包含在所有文件中,我会收到一些错误,例如:
或使用时
ob_start
有没有比在同一个文件的顶部globals.php
和ob_end_flush
底部使用更好更合适的解决方案,或者这种方法是正确的操作方式?
全局变量.php
php - 删除 CodeIgniter 函数中的重复代码
我们使用 CodeIgniter 来包装一些内部函数并以 json 格式显示结果。
有时我们的内部函数可能会将调试字符串打印到屏幕上。所以我们已经开始使用输出缓冲来捕获任何调试并将其添加到结果中$data['response']['debug'] = $ob;
这似乎工作得很好,因为我们已经开始将此代码放入大多数公开的 CI 函数中。
我们现在似乎在重复这个代码流。
将“重复”部分提取到需要时调用的通用模板中的最佳方法是什么?(并非每个函数都实现了这一点 - 只是大多数)。
示例代码:
php - 将 MySQL 表保存到本地计算机
起初,我想原谅我的英语,但我有问题
我以这种方式从数据库中创建一个表:
问题是我试图将这些数据放入文件中,原因是将这些列本地保存在我的计算机上,因为我想在线删除表。
我已经尝试TCPDF
过html2pdf
没有义务将这些放在 a 中pdf
,但我希望这些只是保存。
我希望你能帮助我。
更新:给出了 2 个很好的解决方案。但是我遇到了问题,Acrobat Reader
所以我选择了这个:
php - 没有输出的时候ob_start没用吗?
我刚刚在这里看到了一个与我遇到的问题几乎相同的链接,但我想确保我理解。这是链接: ob_start() 在这里的作用是什么
所以,他的代码没有真正的“输出”——没有回声,没有 html,几乎什么都没有。但他有一个ob_start。我的和他的一样,是遗留代码,而我的没有输出。它所做的只是更新一些表。我在此链接中看到的所有答案都解决了 ob_start 的实际功能 - 我认为只有一个解决了他的真正问题,即“ob_start 在此代码中的作用是什么?”。因此,如果代码是不输出 html 或 echo 或其他任何内容的“幕后”脚本,那么输出缓冲区不是无用的吗?谢谢
php - 包括和 ob_get_clean 不能正常工作
我有三个 php 文件:engine.php、links.php 和 test.php
理论上,当我_insert()
在 test.php 中调用函数时,它应该用 links.php 的输出替换一个字符串,而不是ob_start()
被ob_get_clean()
忽略,而 links.php 的输出只是被回显。
引擎.php
链接.php
测试.php
它没有在 div 中输出一系列链接,而是跳过了从 links.php 返回的完全结束回显,就好像只有一个 include 和 no ob_start()
and一样ob_get_clean()
。
为什么?
php - 如何从包含脚本中捕获编译错误?
我想在函数中包含一个文件,并使用ob_start()
,ob_get_contents()
等将输出保存到文件中。
但是,如果包含的文件中有错误,我想要:
让我的函数知道并捕获它(这样它就可以优雅地处理它)
不输出错误
会set_error_handler
允许吗?
php - PHP Should I use ob_clean after ob_start
I made a simple login-system in php and mysql, but I keep getting errors saying that headers already been sent, and using ob_start fixes this problem, but im not sure if I should then use ob_clean at the footer afterward?
Also, the error comes when I have logged in to the account page, saying header already been sent in previuos page - > header("Location: account.php"); But I have to redirect the user when they login.
My login page looks like this
This code above works if I use ob_start in the header.php file. But should I use ob_clean afterwards in the footer.php file?
Sorry if anything is unclear, english is not my first languish
Thanks!