我有一个PHP站点,它执行在客户端执行期间触发的Cron而不是Cron管理器。执行的Cron之一需要几秒钟才能执行,它会使客户端和服务器之间的连接保持打开状态,直到完成为止。虽然我知道我可以设置一个从服务器而不是在客户端运行期间触发的Cron,但我想知道是否可以不遵循该格式。
那么,PHP脚本是否可以向Apache(或其托管的任何服务器)发送命令以关闭客户端和服务器之间的连接,但是继续运行(因此,不退出)?
答案 0 :(得分:4)
这适用于Apache(显然不适用于使用FastCGI的IIS)
<?php
ignore_user_abort(true); // make sure PHP doesn't stop when the connection closes
// fire and forget - do lots of stuff so the connection actually closes
header("Content-Length: 0");
header("Connection: Close");
flush();
session_write_close(); // if you have a session
do_processing();
// don't forget to `set_time_limit` if your process takes a while
答案 1 :(得分:1)
您可以使用shell
来调用PHP二进制文件...示例:
shell("php -f /path/to/cronfile.php > /dev/null 2>/dev/null &");
将运行而不是等待返回。
答案 2 :(得分:-1)
通常有两种执行形式。
客户支持: 客户端将保留在页面上,页面将继续处理给定的命令,直到完成。
服务器面: 客户端将导航到页面&amp;您在数据库中进行了切换:
UPDATE Table SET PendinCron=1 WHERE IdentiferCol=$IdentiferData
然后你将有一个Cronjob以X间隔运行,并且仅在PendinCron
等于1时才会处理,如果不是。 Cron不会执行所需的任务。