2012-12-15 32 views
-1

目前我有一个parser.php加载一个XML文件,并从XML文件插入到MySQL数据库中的新数据。我将如何去刷新这个PHP文件每30秒,所以我的MySQL表总是有新的数据?我想我可以使用短轮询来做到这一点,但我猜这不是最有效的选择。如何每30秒自动加载一个xml文件?

在此先感谢

+3

使用cron作业。 – nickb

+0

cron作业的问题是我将被限制为1分钟的时间间隔 –

+0

'Cron'或'setInterval'。取决于你想要多少税你的服务器。 – bobthyasian

回答

0

你需要使用一个cronjob,但crons工作运行每隔1分钟以上。

另一种方法是制作一个“守护进程”。

非常简单的例子:

<?php 
while(true) { 
    // check if 30 seconds has passed. 
    // then execute some function... 
}; 
?> 

然后,你需要在你的终端执行这样的:

$ php script.php & 

link应该有所帮助。

Greatings!

+0

是的,我会需要<1分钟的时间间隔做一个守护进程? –

+0

是的,一个守护进程。一个运行在背景中的程序,不断地做着某些事情......在这种情况下,每30秒获取一次xml。 –

+0

听起来不错,我该如何实现一个守护进程? –

2

这是一个非PHP的解决方案,这将需要你有才能运行该脚本外壳(SSH)访问,但您也可以通过PHP与exec(),如果你想运行它。共享主机环境可能会对此方法提出挑战,但只要您可以在您的用户凭据下执行脚本,则运行它应该没有问题。

首先,您需要创建一个包含以下内容的bash脚本并将其保存(本例中,我将使用名称parser.sh)。然后,您可以根据需要调整sleep 30行中的超时时间。

#!/bin/sh 
while true 
    do 
    php parser.php 
    sleep 30 
    done 

为了运行,你需要给它执行权限的脚本。

chmod +x parser.sh 

现在你可以使用nohup命令与号(&)参数,以确保该脚本会在即使终止信号后发送的后台运行,让说,关闭外壳(SSH )。 &符号很重要!现在

nohup ./parser.sh & 

可以使用topps aux | grep parser以确保在脚本运行。正如我之前所说的,您也可以使用PHP exec()来启动进程,但shell仍然是执行此操作的首选和最可靠的方法。

如果你想停止执行你的脚本的后台进程,那么你只需要杀死它。只需使用ps aux | grep parser即可找出解析器进程的PID(位于左边第二列),并将其与kill命令一起使用。

kill 4183 
+0

这听起来相当简单,谢谢 –

+0

它是。有些东西根本不是通过PHP实现的,这就是您将会喜欢bash脚本的地方。 – brezanac

+0

我该如何将这个脚本保存在我的服务器上(对不起,我是多么糟糕!) –