永远有效的PHP脚本:)


PHP script that works forever :)

我正在寻找一些做以下事情的想法。我需要一个PHP脚本来长时间执行某些操作。这是CMS的一个扩展,除了PHP之外,它不能是其他任何东西。它也不能是命令行脚本,因为它应该由只有CMS标准方法的普通人使用。其中一个选项是有一个cron作业(大多数简单的主机都有),它会经常触发脚本,这样它就可以一步一步地执行操作,从一次启动到下一次启动都保持状态,而不是长时间工作。这并不完美,但我看不出任何其他解决方案。如果脚本将重定向到它自己,服务器将中断它。还有什么其他选项可以适用?

提前感谢大家!

您所说的是一个守护进程或长时间运行的程序,它等待客户端程序的调用,执行和操作,提供响应,然后继续等待更多调用。

您可能熟悉Apache&MySQL;)无论如何,PHP在这方面通常是可以的,它确实有能力通过原始套接字以及fork子进程来同时处理多个请求。

已经说过PHP守护进程是YMMV所在的一个工具。有些人会说他们工作得很好,而像我这样的人会说,即使在过多的unset()调用中,他们也存在进程间通信和内存泄漏的问题。

无论如何,您可能无法在共享托管环境中部署任何类型的守护进程。您需要获得更好的服务器包,或者坚持使用基于Cron的解决方案。

这里有一个关于编写PHP守护程序的链接。

此外,还有一个注意事项。Daemon确实会不时崩溃,因此您可能仍然需要存储有关正在发生的事情的状态,以防有人通过电源线绊倒到您的共享服务器:)

我还建议您考虑将其作为守护进程,但如果没有,则可以简单地使用

 set_time_limit(0);
 ignore_user_abort(true); 

在顶部告诉它不要超时,不要被任何事情打断。然后从cron调用它,每天启动它或其他什么。我在许多长时间处理的日常任务中都有这个功能,它对我来说很好。但是,它无法轻松地与外界对话(其他脚本无法查询它或其他任何东西——如果你想查询php服务的话),所以一旦你让它运行,请确保它会停止并将进度打印到日志文件中。