【问题标题】:Continuously updating php page不断更新php页面
【发布时间】:2016-02-25 04:30:26
【问题描述】:

我创建了一个 php 页面来显示一组五个图像中的一个图像。图像是根据从文本文件中读取的数据显示的。另一个应用程序不断更新该文本文件中的数据。因此,每当文件更新时,我的 php 页面都需要从该文件中读取数据,并根据该数据显示图像。我创建了一个无限循环来读取数据。但是当我尝试从浏览器访问 php 页面时,由于无限循环,它没有加载。

$myfile1 = fopen("readfile.txt", "r") or die("Unable to open file!");
$readJsonData = fread($myfile1,filesize("readfile.txt"));
fclose($myfile1);
$obj = json_decode($readJsonData);
$urllogo = 'tatalogo.png';

if(($obj->{"FrontLeft"}) == "TRUE")
{
    $url = 'images/FrontLeft.png';
}
else if(($obj->{"FrontRight"}) == "TRUE")
{
    $url = 'images/FrontRight.png';
}
else if(($obj->{"RearLeft"}) == "TRUE")
{
    $url = 'images/RearLeft.png';
}
else if(($obj->{"RearRight"}) == "TRUE")
{
    $url = 'images/RearRight.png';
}
else
{
    $url = 'images/Normal.png';
}

// infinite loop
while(1)
{
  //reading from the file and refreshing the page.
}

【问题讨论】:

  • 老实说,一个进程写入文件而这个进程读取文件内容的整个过程听起来很可疑。也许,您需要从整体上考虑问题,而不是解决这个孤立的问题。
  • 不建议无限循环刷新,可以使用间隔。如果该应用程序或每个重新刷新间隔都有响应——比如返回一个布尔值,那么这就是你刷新的标志。如果可能,也可以使用 AJAX 来处理数据。
  • 我有一个移动应用程序,它收集一些数据并将数据发送到服务器,然后将其写入文本文件。这个进程读取它的内容并显示它。

标签: php file refresh


【解决方案1】:

在 PHP 中这样设置 header 来刷新 php 页面

header("Refresh: 5;url='pagename.php'");

在 HTML Head 标签中

<html>
    <head>
    <meta http-equiv="refresh" content="5;URL='pagename.php'">
    </head>
</html>
<?php 
Your php script here..
?>

使用Javascript

<script type="text/javascript>
window.setInterval(function(){
  reload_page();
}, 5000);
//Here 5000 in miliseconds so for 5 seconds use 5000
function reload_page()
{
  window.location = 'pagename.php';
}

【讨论】:

    【解决方案2】:

    最合理的方法是使用客户端刷新页面。

    摆脱 PHP 端的所有无限循环。 PHP 只会输出生成时的图像。

    在客户端,您可以执行以下简单操作: &lt;META http-equiv="refresh" content="5;"&gt; 强制每 5 秒刷新一次。

    如果您只想在文件更新时进行更新,则必须更高级。您可以进行 ajax 调用来检查文件是否已更改,如果更改则刷新。 Websockets 将是另一种选择。

    您可能会在 PHP 端做一些讨厌的 hack 以使其在循环中使用 ob_flushsleepheader 来检查文件是否已更改,但这会导致您一旦你意识到你做了什么,就会失眠。 正如下面所指出的,这永远行不通。

    【讨论】:

    • 使用一个 PHP 脚本,您将无法刷新整个页面。一旦内容进入浏览器,浏览器就会想要渲染它。所以,这仍然需要 Javascript 以某种方式定期更新 DOM。
    • 是的,你是对的,数据发送后没有头部重定向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2012-02-08
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    相关资源
    最近更新 更多