PHP中的睡眠功能导致我的页面挂起

时间:2019-01-14 20:04:19

标签: php

我一直在寻找解决这个问题的方法。

我有一个面板,可以将所有内容放在给定目录中并显示出来。我希望它每10秒执行一次操作,因为现在您必须刷新整个页面。

所以当我这样做

GetLogs(); sleep(5); GetLogs();

它没有获取目录,而是显示它们,等待5秒钟,然后再次显示它们,它只是执行GetLogs();,等待5秒钟,然后再次执行,然后加载我的页面。我已经看到人们使用AJAX,但是我认为这个问题有点超出我的范围了。我读过更改apache设置或php设置可以解决此问题,但我不知道如何解决。我也查看了session_write_close和session_start,但是它们什么也没做。这些函数是从此php文件中调用的。请帮助我!

我很愚蠢,出于某种原因,我认为我可以使用服务器端语言来使客户端休眠,这很糟糕。有人可以喂我一个ajax电话吗?

2 个答案:

答案 0 :(得分:0)

如果您只想每5秒钟刷新一次页面,则可以使用

<?php
header("Refresh: 5");
?>

必须在发送任何其他输出之前发送

答案 1 :(得分:0)

这个问题是新开发者经常问的XY problem

PHP在服务器上运行。 Web浏览器不知道服务器上的内容。对于Web浏览器,服务器是一个黑匣子:Web浏览器向其发送文本,服务器处理服务器内容,服务器将文本发送回浏览器。通常,响应文本将以HTML形式描述网页。但是Web浏览器无法知道HTML是如何生成的:它看不到底层的PHP。

此过程有固定的顺序:

  1. 网络浏览器请求网页
  2. 服务器处理请求
  3. 服务器使用网页的HTML响应

您不能真正更改此顺序。诸如ajax之类的技术通过在Web浏览器中执行其他处理并发出其他请求来解决此问题。这由JavaScript处理。例如:

  1. 网络浏览器请求网页
  2. 服务器上的PHP处理请求
  3. 服务器使用网页的HTML响应
  4. 嵌入在网页中的JavaScript将计时器设置为10秒
  5. 10秒钟后,JavaScript再次请求网页
  6. 服务器上的PHP处理请求
  7. 服务器使用网页的HTML响应
  8. Web浏览器中的JavaScript接收HTML并告诉浏览器显示它

这是一个相对简单的交流。实际上,许多网页会变得更加复杂。例如,服务器可能使用JSON而不是HTML进行响应。然后将由浏览器中的JavaScript来完成JSON的有用操作,例如生成HTML。

在您的特定情况下,理想情况下流程应如下所示:

  1. 网络浏览器请求网页。
  2. 服务器以HTML响应。这不必由PHP处理。它可能是静态的.html文件。
  3. HTML使用<script>标签引用JavaScript文件。
  4. Web浏览器会在HTML中看到<script>标签,并从服务器请求它。
  5. 服务器发送JavaScript文件。
  6. Web浏览器运行JavaScript。
  7. JavaScript每隔10秒使用setInterval来运行一个JavaScript函数。
  8. 为确保数据立即可用(无需等待10秒),还立即调用了JavaScript函数。
  9. 每次运行时,JavaScript函数都会使用ajax从服务器请求数据。
  10. 每次请求数据时,服务器上的PHP就会运行。
  11. 服务器上的
  12. PHP获取或计算最新数据。
  13. PHP使用json_encode()编码数据,而不是输出HTML。
  14. 服务器将JSON发送到Web浏览器。
  15. Web浏览器中的JavaScript函数接收JSON。
  16. 由于响应只是文本,因此JavaScript必须使用JSON.parse()解析JSON。
  17. JavaScript处理数据并更新用户Web浏览器中显示的内容。

这里要注意的重要一点是,Web浏览器和服务器之间没有流畅的通信隧道。 您不能从PHP调用JavaScript函数,也不能从JavaScript调用PHP函数。每次需要向另一个发送消息时,

  1. 它必须由Web浏览器启动。服务器无法将数据任意发送到Web浏览器;浏览器必须请求它。这意味着JavaScript可以启动交换,但是PHP不能。
  2. 您每次都需要重新运行PHP脚本。什么都没有保存。所有变量均被重置。从头开始。

这样想:说有两个人,爱丽丝和鲍勃。爱丽丝和鲍勃想要交换消息。他们唯一的办法就是通过蜗牛邮件。但是鲍勃没有邮票。因此,每次他们想要交换消息时,爱丽丝都要发起对话。她给鲍勃发了一封信,包括一张额外的邮票,以便鲍勃可以发送回复。鲍勃必须等待爱丽丝的来信才能发送回复。一旦他回复,就可以了-在运输过程中,他无法编辑这封信。如果他想进行更改,则必须等待爱丽丝请求更改。

在寻找问题的答案的过程中,您可能会遇到有关禁用缓冲或重复刷新页面的说明。尽管这些技术在特定情况下可能会提供理想的结果,但它们并不是真正好的解决方案。您应该研究解决眼前的实际问题:您需要找到一种方法来使Ajax在Web浏览器中使用JavaScript。

相关问题