php:没有浏览器的刷新脚本

时间:2012-01-05 23:20:59

标签: php

我知道这可以通过cron选项卡完成,但我想知道是否有任何方法以一定的间隔(比如一秒)刷新php脚本,而不使用浏览器/ javaScript。

我有一个不断输出数据的设备,我需要一个可以独立运行的php脚本,以便在数据库发生变化时将数据加载到数据库中。

我的服务器是一个Linux机器,它包含许多不同的开发项目,所以我只能访问它的一个分区。

设备实际上是使用节点和python来提取数据,我正在为我正在创建的图表界面创建一个Web界面和一个日志记录系统。因此,它需要以一致的间隔提取数据,以便绘制我正在存储的数据。

感谢大家的赘言,并从这里给我很多工作。我将研究所提供的解决方案,看看我是否可以在我的请求中更具体。

5 个答案:

答案 0 :(得分:1)

cron的最短时间范围是1分钟。如果要不断处理数据,则需要在服务器上运行PHP脚本作为某种守护进程(后台进程)。

一种简单但不太高效的CPU方法是运行类似:

$stop = false;
while ( ! $stop ) {
   sleep(1); // Sleep for one second
   if ( shouldProcess() ) { // Check if there is anything to process
      doProcess(); // Run whatever task necessary
   }
}

还有一个PEAR包http://pear.php.net/package/System_Daemon用于处理init.d行为和日志记录等内容。

答案 1 :(得分:0)

你是对的 - 有一份cron工作。假设您在PHP文件的第一行运行Linux或弹出#!/usr/bin/php,然后运行crontab -e并弹出* * * * * /path/to/myphpscript.php以便每分钟运行一次。

每一秒都在为失败做好准备。如果你真的必须这样做,请跟踪脚本运行了多长时间,并在循环结束时将其设置为循环sleep(1),直到脚本运行59秒。更清洁的解决方案。

答案 2 :(得分:0)

没有crontab,有几个解决方案。没有什么比contab更有效,但仍然有效。 付费服务online将以给定的时间间隔调用您的一个脚本/页面。除了一些权限差异外,其工作方式与crontab非常相似。

此外,您可以设置您的网页,以便每当有人访问您的网站时,检查其重新加载数据的“时间”。例如,您可以在数据库中有一个表,每次“加载数据”时,您都会在该表中编写表。然后检查当前时间并等到一小时后重新加载。它与缓存非常相似。

答案 3 :(得分:0)

那里有很多问题。

你想以1秒的间隔重复一些东西 - 但是如果你正在驾驶这个浏览器,你如何处理并发访问? HTTP不支持将数据从服务器推送到客户端,但您可以使用comet模拟它。 1秒是HTTP事务的非常短的时间 - 通常大部分延迟将降低到网络延迟 - 抖动有多重要?

  

我有一个不断输出数据的设备,我需要一个可以独立于浏览器运行的php脚本

你是对的 - 绝不能从浏览器访问收集这些数据的脚本。一个显而易见的解决方案是将其作为守护程序运行(即,在正常操作下不退出但使用usleep和循环以固定间隔执行作业的脚本)。但是你没有提到它正在运行的操作系统(这与编写守护进程有很大关系)。您也没有说明如何访问设备数据。

使用守护进程并不明显表明你有很多阅读要做 - 使用像nagios或statsd这样的东西来处理调度/日志记录要简单得多。

答案 4 :(得分:-1)

如果我理解你的问题,我只是提供解决方案来刷新页面而不需要javascript / cron作业。我们可以使用元标记刷新页面

例如,每隔30秒刷新一次文档:

<meta http-equiv="refresh" content="30" />

希望这有帮助。