程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2021-03-11 08:51     阅读(1096)     评论(0)     点赞(2)     收藏(3)


问题
我有一个表单,提交后将运行基本代码来处理提交的信息,并将其插入数据库中以显示在通知网站上。此外,我还有一个名单,他们注册了通过电子邮件和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)


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.phpheidong.com/blog/article/1296/2b58ae1d85bee0012be6/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

2 0
收藏该文
已收藏

评论内容:(最多支持255个字符)