php - 为什么 PHP 一次发送所有内容?

标签 php javascript html

Possible Duplicate:
what is output buffering?

我有一些内容需要一段时间才能由 PHP 生成。同时我想使用这个简单的 JS 技巧来显示“正在加载...”消息。一旦生成输出,该消息就会消失。

<p id="loading_msg">Loading...</p>

<h1>Hello</h1>
<?php
    sleep(2); // This is the greedy function call
    print '<p>This content definitely took a while to be generated !.</p>';
?>

<script type="text/javascript">
    var e = document.getElementById("loading_msg");
    e.style.display = "none";
</script>

问题是,而不是将所有内容发送到 sleep(2);然后阻塞,它会等待所有页面生成之前,然后然后一次全部发送。它显然破坏了我的“正在加载...”消息的目的,因为它在 2 秒过去之前不会出现。关于为什么以及如何解决这个问题有什么想法吗?

最佳答案

默认情况下,PHP 将缓冲您的输出并向用户发送较少数量的较大块。您可以使用flush立即将写入缓冲区的内容发送给用户:

<p id="loading_msg">Loading...</p>

<h1>Hello</h1>
<?php
    flush();
    sleep(2);

如果您之前已通过调用 ob_start 启用了输出缓冲,则此操作将不起作用或 php.ini 指令 output_buffering1

关于php - 为什么 PHP 一次发送所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11544714/

相关文章:

javascript - <输入>不会更新

php - 使用 php 发送带附件的电子邮件

javascript - 使用循环计数器时 getFullYear 不起作用

php - Codeigniter 购物车 : Adding the Same Product Again

javascript - 解析云代码获取发出请求的用户

javascript - 经典方法的目的|与对象状态的关系

PHP 执行脚本后返回空白页

javascript - jQuery 函数使整个页面加载两次

php - mysql-php,创建临时表时出错

php - 正则表达式和 BBCode - 完善嵌套报价