提交表单后,如何在后台运行PHP脚本?

我有一个表单,提交后将运行基本代码来处理提交的信息,并将其插入数据库中以显示在通知网站上。此外,我还有一个列表,他们注册了通过电子邮件和SMS消息接收这些通知的人员。此列表暂时是微不足道的(仅推送约150个),但是足以导致花费一分钟以上的时间在整个订户表中循环并发送150多个电子邮件。(由于批量电子邮件政策,电子邮件是根据我们的电子邮件服务器的系统管理员的要求单独发送的。)

在此期间,发布警报的个人将坐在表单的最后一页上将近一分钟,而不会对发布通知进行任何积极的强化。这导致了其他潜在的问题,我认为所有可能的解决方案都不理想。

  1. 首先,发布者可能认为服务器落后,然后再次单击“提交”按钮,导致脚本重新开始或运行两次。我可以通过使用JavaScript禁用按钮并替换文本来表示类似“正在处理…”的方法来解决此问题,但这并不理想,因为在执行脚本的过程中,用户仍然会停留在页面上。(此外,如果禁用了JavaScript,则此问题仍然存在。)

  2. 其次,张贴者在提交表格后可能会过早关闭标签或浏览器。脚本将一直在服务器上运行,直到尝试写回浏览器为止,但是,如果用户随后浏览到我们域内的任何页面(脚本仍在运行时),浏览器就会挂起加载页面,直到脚本结束。(只有在关闭浏览器的选项卡或窗口,而不是关闭整个浏览器应用程序时,才会发生这种情况。)但是,这并不理想。

我已经决定我想将脚本的“电子邮件”部分分解成一个单独的文件,在发布通知后可以调用该文件。我最初想到的是在成功发布通知后将其放在确认页面上。但是,用户将不知道此脚本正在运行,并且任何异常对他们来说都是不明显的。该脚本不能失败。

但是,如果我可以将此脚本作为后台进程运行怎么办?因此,我的问题是:如何执行PHP脚本作为后台服务触发并完全独立于用户在表单级别执行的操作而运行?

不能

被cron’ed。它必须在提交表单后立即运行。这些是高优先级的通知。另外,运行我们的服务器的系统管理员不允许cron超过5分钟的时间运行。

回答:

做了一些实验用execshell_exec我已经揭露了完美工作的解决方案!我选择使用,shell_exec这样我就可以记录发生(或不发生)的每个通知过程。(shell_exec以字符串形式返回,这比使用exec,将输出分配给变量然后打开要写入的文件要容易得多。)

我正在使用以下行来调用电子邮件脚本:

shell_exec("/path/to/php /path/to/send_notifications.php '".$post_id."' 'alert' >> /path/to/alert_log/paging.log &");

重要的是要注意&命令的末尾(@netcoder指出)。该UNIX命令在后台运行一个进程。

脚本路径后用单引号引起来的多余变量被设置为$_SERVER['argv']可以在脚本中调用的变量。

然后,电子邮件脚本使用将输出到我的日志文件>>,并将输出如下内容:

[2011-01-07 11:01:26] Alert Notifications Sent for http://alerts.illinoisstate.edu/2049 (SCRIPT: 38.71 seconds)

[2011-01-07 11:01:34] CRITICAL ERROR: Alert Notifications NOT sent for http://alerts.illinoisstate.edu/2049 (SCRIPT: 23.12 seconds)

以上是 提交表单后,如何在后台运行PHP脚本? 的全部内容, 来源链接: utcz.com/qa/406236.html

回到顶部