持续更新的php页面

3

我创建了一个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.
}

说实话,整个过程中一个进程写入文件,另一个进程读取其内容听起来非常可疑。也许,你需要将问题作为一个整体来考虑,而不是解决这个孤立的问题。 - jsfan
不建议使用无限循环来刷新,可以考虑使用间隔。如果应用程序或每个刷新间隔都有响应 - 比如返回一个布尔值,那么这就是你刷新的标志。此外,如果可能,请使用AJAX处理数据。 - Aesthetic
我有一个移动应用程序,它收集一些数据并将数据发送到服务器,在那里写入文本文件。该过程读取其内容并显示它。 - SP_
2个回答

1
在 PHP 中,设置头部如下以刷新 PHP 页面。
header("Refresh: 5;url='pagename.php'");

在HTML的头部标签中。
<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';
}

0

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

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

在客户端,您可以做一些简单的事情,例如:<META http-equiv="refresh" content="5;"> 每5秒强制刷新。

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

您可能可以在PHP端进行一些恶心的黑客攻击,使用ob_flushsleepheader在循环中检查文件是否已更改,但是一旦意识到自己所做的事情,这将使您失眠。如下面指出的那样,这永远不会起作用。


使用一个PHP脚本,您将无法刷新整个页面。一旦内容到达浏览器,浏览器将希望呈现它。因此,这仍然需要定期更新DOM的Javascript。 - jsfan
没错,你说得对,发送数据后没有头部重定向。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接