【问题标题】:Show results while processing in php在 php 中处理时显示结果
【发布时间】:2019-12-04 15:29:34
【问题描述】:

我正在本地主机中运行一个 php 抓取脚本。

当用户填写表单并提交按钮时,它会将一些数据发布到 php 脚本(即 script.php)。 它在我的本地主机上运行正常,当 script.php 运行时,它会显示一些关于爬取的信息。

但是当我将它上传到服务器时,script.php 在处理时没有显示,只有在完成后才显示。 所以我在服务器上运行下面的代码,但也没有工作(它在本地主机上工作正常)。

<?php
header( 'Content-type: text/html; charset=utf-8' );
echo 'Begin ...<br />';
for( $i = 0 ; $i < 10 ; $i++ )
{
    echo $i . '<br />';
    flush();
    ob_flush();
    sleep(1);
}
echo 'End ...<br />';
?>

我添加了所有的flush方法,包括ob_implicit_flush(true);ob_start(),但都一样。 我认为服务器有问题,但无法准确指出。 谁能帮帮我?

【问题讨论】:

  • HTTP 不支持部分响应。 Web 服务器必须始终获取整个输出并将其作为一个返回给客户端。使其异步工作将需要额外调用 Web 服务器以获取更新。
  • 这能回答你的问题吗? Display output in parts in PHP
  • @Patrick Q 根据我的经验,大多数网络浏览器在得到完全响应之前不会开始渲染。因此,即使您强制 Web 服务器返回部分数据,Web 浏览器仍会等待其余部分。如果另一端有网络浏览器以外的其他东西,这将起作用。
  • @S3Mi “这能回答你的问题吗?”是将问题标记为重复时创建的新自动评论文本。我绝对讨厌这种变化,但这是另一个讨论。这个问题几乎是那个问题的重复,无论 OP 想要做什么实际上是否可以实现(并且链接问题中的答案指出了它的局限性/相对不可能)
  • [link]copyrighthousebooks.com/test4.php 这是此代码的 url,它在其他服务器上正常工作。是因为服务器设置错误吗?

标签: php server flush php-ini


【解决方案1】:

正如人们在 cmets http 页面中所说的那样,期望得到完整的响应。

获取更新流的方法是让您的 PHP 在完成过程中的各个阶段时更新数据库或文件,然后在单独的 http 页面上使用 ajax requests 来查询更新的数据库(通过另一个 PHP 脚本) 或直接文件。

【讨论】:

  • 好的,听起来不错,但在这里我只想问为什么即使是简单的脚本(每秒打印一次数字)也无法在服务器上运行。我将代码放到另一台服务器上,它工作正常,但不仅仅是这台服务器。为什么?
猜你喜欢
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
相关资源
最近更新 更多