当前位置: 首页 > 面试题库 >

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

符棋
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 我有一个脚本,每5分钟检查一次PC上的内容,并且我不希望Python显示在任务栏上。我使用Windows作为操作系统。 有什么方法可以让Python在后台运行并强制其不在我的任务栏中显示? 问题答案: 在控制面板中查找计划任务。

  • 问题内容: 我认为这很简单,但是正如标题所示,在任何地方都找不到如何执行此操作的方法,就像成功提交表单后如何处理ajax一样。我尝试搜索它,但所看到的只是我需要的相反内容,即在ajax发布后提交。我将尝试草拟与Im正在研究的程序非常相似的程序。 这是我的表格。 这是一个有关ajax帖子的示例(不要介意该帖子的逻辑): 现在,我想做的就是提交表单时,如果提交成功,就会触发ajax发布。因此,就像在一

  • 问题内容: 我有一个简单的表单,其中remote = true。 此表单实际上位于HTML对话框中,单击“提交”按钮后,该对话框将立即关闭。 现在,在成功提交表单之后,我需要在HTML主页面上进行一些更改。 我尝试使用jQuery。但是,这不能确保任务在表单提交的某种形式的响应之后得到执行。 如何附加回调,以便仅在成功提交表单后执行我的代码?有什么方法可以向表单添加一些.success或.comp

  • 我有一个来自WordPress的contact-template.php文件... 表单有4个必填字段... 现在,如果任何或所有必填字段为空,表单将不会提交,用户将在每个为空的文本输入字段下面得到“此字段是必填的”消息。-这完全是我想要的 我遇到的问题是,当填写所需的字段,并点击“提交”按钮时,会有10-15秒的停顿,然后显示“谢谢你,我们会尽快回复你”的消息。 由于这种暂停,用户会多次单击su

  • 问题内容: 我想在点击提交按钮时验证WordPress帖子上的用户条目,显示错误消息是否存在问题,如果一切正常,则提交表单。我有一个PHP函数进行检查,如果输入的数据还可以,则返回,否则返回一些错误代码。以下JavaScript发出AJAX请求,并应在成功检查后继续提交表单,但不会: 该代码是根据WPSE问题改编的,该问题最初对我不起作用,因为未提交表单。我发现,如果绑定到的jQuery函数返回t

  • 问题内容: 我需要执行一个shell脚本。难得的是我想这样做 我不希望它等待命令完成,我希望它在后台进程中运行。我不想要另一个php线程,因为它将超时,该命令最多可能需要3个小时才能完成。 问题答案: 您需要重定向命令的输出。 如果使用此功能启动程序,则要使其在后台继续运行,必须将程序的输出重定向到文件或其他输出流。否则,PHP会挂起,直到程序执行结束。 http://php.net/manual