问题
我有一个表单,当提交时,将运行基本代码来处理提交的信息,并将其插入数据库,以便在通知网站上显示。此外,我还有一个通过电子邮件和短信接收这些通知的注册用户名单。这个列表是微不足道的时刻(只有接近150) ,但它足以导致它需要一分钟以上的周期,通过整个表的订阅者和发出150多个电子邮件。(由于大量电子邮件的政策,我们的电子邮件服务器的系统管理员正在按要求单独发送电子邮件。)
在此期间,发布警告的个人将坐在表单的最后一页上几乎一分钟,没有任何积极的强化,他们的通知正在张贴。这会导致其他潜在的问题,所有可能的解决方案,我觉得都不是理想的。
首先,发布者可能认为服务器滞后,再次点击“提交”按钮,导致脚本重新启动或运行两次。我可以解决这个问题,使用 JavaScript 禁用按钮,并替换文本来说类似于“ Processing...”,但这不是理想的,因为用户仍然会停留在页面上的脚本执行的长度。(另外,如果禁用了 JavaScript,这个问题仍然存在。)
其次,海报可能会在提交表单后过早地关闭标签或浏览器。脚本会一直在服务器上运行,直到它尝试回写到浏览器,但是如果用户然后浏览到我们域中的任何页面(当脚本仍在运行时) ,浏览器会挂起加载页面,直到脚本结束。(只有在关闭浏览器的选项卡或窗口而不是整个浏览器应用程序时才会发生这种情况。)尽管如此,这还是不够理想。
(可能)解决方案
我已经决定,我想把脚本的“电子邮件”部分分解成一个单独的文件,我可以在通知发布后调用。我最初想把这个确认页面后,通知已成功张贴。但是,用户不会知道这个脚本正在运行,任何异常对他们来说都不明显; 这个脚本不能失败。
但是,如果我可以将这个脚本作为后台进程运行呢?因此,我的问题是: 如何执行 PHP 脚本作为后台服务触发器,并且完全独立于用户在表单级别的操作来运行?
编辑: 这个 不能被破坏了。它必须在提交表单的同时运行。这些是高优先级通知。此外,运行我们的服务器的系统管理员不允许 crons 运行的频率超过5分钟。