gpt4 book ai didi

php - 将脚本函数卸载到响应后 : methods and best-practices?

转载 作者:行者123 更新时间:2023-12-03 17:26:43 27 4
gpt4 key购买 nike

第一的,

设置:

我有一个脚本,它在用户点击“上传”按钮后执行几个任务,该按钮向脚本发送它需要的数据。现在,这部分目前是强制性的,我们此时无法选择从实时源中删除上传和绘图。

本节故意冗长地表达观点。如果你讨厌那个,请跳过

现在使用正则表达式从一个非常时髦的源解析数据,然后分解成一个数组。然后它会检查数据库中是否存在已在上传数据的日期范围内的任何数据。如果数据库中不存在数据日期范围,则插入数据并向用户输出成功(还有一些安全检查、数据源验证和基本上传验证)...如果数据确实存在,然后脚本获取数据库中已有的数据,找出两组之间的差异,删除不匹配的旧数据,添加新数据,然后向受这些更改影响的每个人发送一封电子邮件(每个人发送一封电子邮件)在该电子邮件中进行所有相关更改的人,这是另一个步骤)。电子邮件地址是通过 LDAP 搜索来提取的,因为我们的数据库有他们的工作电子邮件,但 LDAP 有他们的个人电子邮件,以确保他们在第二天到来之前收到电子邮件并且在不知情的情况下被发现。最后,数据上传者被告知“已进行更改,已发送电子邮件”。这才是他们真正关心的。

现在我可能会添加一个 Google 日历 API,将数据(当它是调度数据时)发布到用户的 Google 日历。我会通过他们的工作日历来完成,但我想在处理为 Exchange 设置 WebDav 系统之前,我会用 Google 的 API 弄湿我的脚趾。
</backstory>
现在!

实际问题

此时,在 Google 集成之前,脚本最多需要一秒半的时间来运行。这非常令人印象深刻,至少我是这么认为的(服务器,而不是我的编码)。但是在测试中,Google 位是 SLOOOOW。我们或许可以解决这个问题,但它提出了一个更大的问题......

在用户确认数据库已更新后,卸载某些工作的最佳方法是什么?这是他最关心的部分,也是最关键的部分。电子邮件通知和谷歌日历更新只是为了那些受上传影响的人的利益,如果这些通知有问题,他会听到(然后我会听到)不管脚本告诉他先。

例如,有没有办法运行由脚本上次执行触发的 cronjob? PHP 可以使用 exec() 创建定时任务吗?能力?是否有一些规范化的方式来处理需要完成的执行后工作?

对此的任何建议都非常感谢。我觉得脚本臃肿反射(reflect)了我的发展阶段以及我最终知道如何在网络应用程序中进行分工的需要。

但我也担心这没有完成,因为用户需要知道所有任务何时完成等。所以这带来了:

最佳实践/更主观的问题

基本上,是否有这样一种想法,即进度条、实时卸载和其他让用户受限于脚本的方法——当然,当与代码优化相结合时——是更好、更受欢迎的方法然后简单地说“我们已经完成了你的部分,如果你需要我们,我们会通知用户”等等。

有什么大事需要避免(除了显然根本不给用户任何反馈)?

谢谢阅读。编码部分至关重要,所以不要觉得有必要覆盖第二部分或忘记覆盖编码部分!

最佳答案

有很多方法可以解决这个问题。您可以像上面所说的那样使用 exec(),但是如果提交点击次数过多,您可能会遇到 DoS 情况。 pcntl 扩展可以说更擅长管理这样的进程。退房 this post看一个讨论(有 3 个部分)。

您可以使用 Javascript 发送第二个 ajax 帖子,然后运行适当的工作脚本。通过使用 ignore_user_abort() 并发送 Content-Length,浏览器可以提前断开连接,但您的 apache 进程将继续运行并处理您的数据。优点是没有 forkbomb 的潜力,缺点是它会打开更多的 apache 进程。

另一种选择是在后台使用一个 cron 来查看进程队列表以供“稍后”执行 - 您将项目粘贴到前端的该表中,并在处理时在后端删除它们(参见 Zend_Queue )。

另一种方法是使用更分散的作业框架,如 gearmand - 可以在其他机器上处理物品。

这一切都取决于您的整体能力和要求。

关于php - 将脚本函数卸载到响应后 : methods and best-practices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1549453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com