-1

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

提前致谢

4

2 回答 2

2

这是一个非 PHP 解决方案,需要您具有 shell (SSH) 访问权限才能运行脚本,但是如果您愿意,您也可以使用exec()通过 PHP 运行它。共享托管环境可能会对这种方法提出挑战,但只要您可以在您的用户凭据下执行脚本,运行它应该没有问题。

首先,您需要创建一个包含以下内容的 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 &

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

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

kill 4183
于 2012-12-15T17:09:14.023 回答
0

您需要使用 cronjob,但 crons 作业每 1 分钟或更长时间运行一次。

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

非常基本的例子:

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

然后您需要在终端中执行此操作:

$ php script.php &

这个链接应该有帮助。

好样的!

于 2012-12-15T16:48:16.310 回答