目前我有一个parser.php加载一个XML文件,并从XML文件插入到MySQL数据库中的新数据。我将如何去刷新这个PHP文件每30秒,所以我的MySQL表总是有新的数据?我想我可以使用短轮询来做到这一点,但我猜这不是最有效的选择。如何每30秒自动加载一个xml文件?
在此先感谢
目前我有一个parser.php加载一个XML文件,并从XML文件插入到MySQL数据库中的新数据。我将如何去刷新这个PHP文件每30秒,所以我的MySQL表总是有新的数据?我想我可以使用短轮询来做到这一点,但我猜这不是最有效的选择。如何每30秒自动加载一个xml文件?
在此先感谢
你需要使用一个cronjob,但crons工作运行每隔1分钟以上。
另一种方法是制作一个“守护进程”。
非常简单的例子:
<?php
while(true) {
// check if 30 seconds has passed.
// then execute some function...
};
?>
然后,你需要在你的终端执行这样的:
$ php script.php &
这link应该有所帮助。
Greatings!
是的,我会需要<1分钟的时间间隔做一个守护进程? –
是的,一个守护进程。一个运行在背景中的程序,不断地做着某些事情......在这种情况下,每30秒获取一次xml。 –
听起来不错,我该如何实现一个守护进程? –
这是一个非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 &
可以使用top
或ps aux | grep parser
以确保在脚本运行。正如我之前所说的,您也可以使用PHP exec()
来启动进程,但shell仍然是执行此操作的首选和最可靠的方法。
如果你想停止执行你的脚本的后台进程,那么你只需要杀死它。只需使用ps aux | grep parser
即可找出解析器进程的PID(位于左边第二列),并将其与kill命令一起使用。
kill 4183
这听起来相当简单,谢谢 –
它是。有些东西根本不是通过PHP实现的,这就是您将会喜欢bash脚本的地方。 – brezanac
我该如何将这个脚本保存在我的服务器上(对不起,我是多么糟糕!) –
使用cron作业。 – nickb
cron作业的问题是我将被限制为1分钟的时间间隔 –
'Cron'或'setInterval'。取决于你想要多少税你的服务器。 – bobthyasian