javascript - 终止另一个 php 脚本

标签 javascript php ajax

我有一个带有 javascript 代码的 php 脚本,并且我正在向第二个 php 脚本发送 AJAX get() 请求。第二个脚本开始运行。如何从第一个脚本终止第二个脚本?

最佳答案

根据问题评论中的澄清,您所拥有的似乎是这样的:

  1. 用户使用 JS 与之交互的 HTML 页面(该页面可能是用 PHP 生成的,但这与本场景无关)。
  2. 来自页面 (1) 的 AJAX 调用会调用生成图像的 PHP 脚本,这是一个缓慢且昂贵的过程
  3. 您需要一个额外的 AJAX 触发器来中止当前正在运行的脚本 (2)

我采取的基本方法是脚本(2)启动时创建某种“锁定”或“触发”,并定期在步骤之间进行检查。触发器可以是一个文件,也可以是数据库中的一行等 - 关键是它需要位于多个 PHP 脚本可以同时访问的位置。

(3) 处的脚本可以是一个非常小的 PHP 脚本,它删除您想要中止的特定文件/数据库行/等。当 (2) 处的脚本接下来检查时,它将发现其锁/触发器不再存在,然后可以整理其创建的任何工作数据并退出

确保在执行此操作时考虑安全性:触发器的名称必须为 JS 所知,因此可以由用户操作。它应该具有足够的随机性,以便某人无法恶意中止所有进程,并且其格式应受到足够的限制,以便中止脚本不会被欺骗而删除与其无关的文件。这实际上并不难 - 只需要随机的数字和字母字符串即可 - 但删除脚本需要确保这实际上是它接收到的格式,因为它不能信任 JS 会这样做。

对此的一个变体是拥有一个“心跳”系统,其中 JS 计时器定期更新带有时间戳的锁定/触发器,以表示“是的,请继续处理这个”;如果 (2) 处的脚本发现时间戳太旧,则会中止。如果您希望在用户感到无聊并离开页面时中止执行,则此方法很有用,因为您无法可靠地将其捕获为事件并发送特定的“中止”请求(例如,考虑用户只需拔掉其电源插头)来自互联网的笔记本电脑)。

超越“停止!”和“继续!”,您实际上可以使用这种方法将任何内容与正在运行的 PHP 进程进行通信,只需将其写入文件或数据库即可。由于 PHP 中没有“事件”模型,也没有任何类型的线程(无需进入相当复杂的第 3 方扩展),PHP 脚本在开始运行后发现事物发生变化的唯一方法是主动查询它们,因此长时间运行的脚本应该尽可能结构化,以便它们可以定期“检查邮件”。

关于javascript - 终止另一个 php 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19861712/

相关文章:

javascript - 使用 Node JS 将多个 JPG 转换为动画 GIF

javascript - 如何将外部函数附加到 $routeProvider 解析?

php - 无法在 MySQL 数据库中存储 Firebase token

javascript - 大尺寸图片不上传

javascript - Zebra DatePicker 定位问题

javascript - 为什么 React 会同时显示我的所有组件?

php - 将特色图片添加到自定义帖子类型

php - 无法在 AJAX 文件中运行 javascript

javascript - AJAX POST 请求在 POSTMAN 中有效,但在 Chrome 中无效

jquery - jQuery ajax处理204无内容