目前我有一个parser.php,它加载一个xml文件,并将xml文件中的新数据插入到mysql数据库中。我怎么会每30秒刷新一次这个php文件,所以我的mysql表总是有新数据?我想我可以使用短轮询来做到这一点,但我猜这不是最有效的选择。
提前致谢
答案 0 :(得分:2)
这是一个非PHP解决方案,需要您具有shell(SSH)访问权限才能运行该脚本,但是您也可以通过PHP使用 exec() 运行它你想要。共享托管环境可能会对此方法构成挑战,但只要您可以在用户凭据下执行脚本,就可以毫无问题地运行它。
首先,您需要创建一个包含以下内容的bash脚本并保存(我将使用名称parser.sh
来实现此示例)。然后,您可以根据需要调整sleep 30
行中的超时。
#!/bin/sh
while true
do
php parser.php
sleep 30
done
为了运行脚本,您需要为其提供执行权限。
chmod +x parser.sh
现在您可以将 nohup 命令与&符号(&)一起使用,以确保即使在发送终止信号之后脚本也会在后台运行,让我们说,关闭shell(SSH)。 &符号非常重要!
nohup ./parser.sh &
现在,您可以使用top
或ps aux | grep parser
来确保脚本正在运行。正如我之前所说,你也可以使用PHP exec()
来启动这个过程,但shell仍然是首选和最可靠的方法。
如果你想停止执行你的脚本的后台进程,那么你只需要杀死它。只需使用ps aux | grep parser
找出解析器进程的PID(位于左侧第二列),并将其与 kill 命令一起使用。
kill 4183
答案 1 :(得分:0)
您需要使用cronjob,但crons作业每1分钟或更长时间运行一次。
另一种方法是制作一个“守护进程”。
非常基本的例子:
<?php
while(true) {
// check if 30 seconds has passed.
// then execute some function...
};
?>
然后你需要在你的终端执行:
$ php script.php &
这link应该会有所帮助。
Greatings!