【问题标题】:sleep not working inside php IF statement睡眠在php IF语句中不起作用
【发布时间】:2019-10-03 03:51:32
【问题描述】:

我在 PHP 中有一个简单的代码,在移动上传的文件后,需要打印一些信息,但问题是,我在 IF 语句中有一个 Sleep(),并且睡眠前后的所有文本都只显示当睡眠计数结束时。

代码如下:

if(move_uploaded_file($_FILES['uploadvideo']['tmp_name'],$target_path))
{
echo "<pre>";
echo "Your video ".$cname." has been successfully uploaded<br>";
echo sha1_file($target_path)."<br>";
echo md5_file($target_path)."<br>";
ob_end_flush();
flush();
sleep(2);
echo "Please check if your file is good";
echo "</pre>";
}

如果我把冲洗,并在 IF 外面睡觉,一切正常。

问题是 Sleep() 语句可以插入到 IF 中吗?

谢谢!

【问题讨论】:

  • 您的脚本是否达到最大执行时间?
  • @VermaJr。没有,运行正常,执行时间设置为180秒。
  • 为什么要使用睡眠?你想做的事情不需要它?
  • @BramVerstraten 我需要睡眠,因为我希望在之前的某个时间打印文本
  • 在这种情况下使用 javascript 会是更好的解决方案。

标签: php sleep php-7


【解决方案1】:

sleep() 工作正常。但它不能帮助你实现目标。

flush() 无法强制将您在sleep() 之前生成的内容发送回客户端(浏览器)。它所做的就是把它推到最后。但是它无法控制文本退出解释器时会发生什么。 Web 服务器可以缓存内容并在脚本结束时将其与其余内容一起发送。而且,有时,浏览器本身不会渲染一段文本,直到它完全接收到它。

flush()的文档中有说明。

您可以使用 JavaScript 和 AJAX 来实现您想要的效果(并且实际上是正确地实现它)。

【讨论】:

    【解决方案2】:

    你需要指定字符集

    header('Content-type: text/html; charset=utf-8');
    

    它仍然可能无法正常工作。在每个 echo 语句之后尝试刷新,即使这样也不是每个都可能被刷新。刷新输出缓冲区只是将数据发送到输出,不保证发送到浏览器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多