从另一个 php 脚本终止一个脚本
Terminate a php script from another
我有一个带有javascript代码的php脚本,我正在向第二个php脚本发送AJAX get()请求。第二个脚本开始运行。如何从第一个脚本终止第二个脚本?
根据问题评论中的澄清,您似乎拥有的是:
- 用户使用 JS 与之交互的 HTML 页面(此页面可能是使用 PHP 生成的,但这与此方案无关)。
- 来自页面 (1) 的 AJAX 调用调用生成图像的 PHP 脚本,这是一个缓慢且昂贵的过程
- 您需要一个额外的 AJAX 触发器,该触发器将中止当前正在运行的脚本 (2)
我将采取的基本方法是使用脚本 (2) 在启动时创建的某种"锁定"或"触发器",并在步骤之间定期检查。触发器可以是文件,也可以是数据库中的一行等 - 关键是它需要位于多个PHP脚本可以同时访问的地方。
然后,(3)中的脚本可以是一个非常小的PHP脚本,它删除要中止的特定文件/数据库行/等。当 (2) 处的脚本下次检查时,它会发现它的锁/触发器不再存在,然后可以整理它创建和exit
的任何工作数据。
确保在执行此操作时考虑安全性:JS必须知道触发器的名称,因此可以由用户操作。它应该是足够随机的,以至于某人不能恶意中止所有进程,并且其格式应该足够限制,以至于中止脚本不能被欺骗删除与其无关的文件。这实际上并不难 - 只需随机的数字和字母字符串即可 - 但是删除脚本需要确保这实际上是它收到的格式,因为它不能信任JS这样做。
对此的一种变体是有一个"心跳"系统,其中JS计时器定期使用时间戳更新锁定/触发器,以表示"是的,请继续处理此";如果(2)处的脚本发现时间戳太旧,它将中止。如果您想在用户感到无聊并离开页面时中止执行,则此方法是有利的,因为您无法可靠地将其捕获为事件并发送特定的"中止"请求(例如,考虑用户只是从互联网上拔下他们的笔记本电脑)。
除了"停止!"和"继续!"之外,你实际上可以使用这种方法与正在运行的PHP进程进行任何通信,只需将其写入文件或数据库即可。由于 PHP 中没有"事件"模型或任何类型的线程(无需涉及相当复杂的第三方扩展),PHP 脚本在开始运行后发现事物已更改的唯一方法是主动查询它们,因此长时间运行的脚本应该尽可能结构化,以便它们可以定期"检查他们的邮件", 可以这么说。
您可以中断 ajax 查询。
例如,如果您在 file1.php 中使用 jQuery,则通过 ajax 调用请求 file2.php:
<script>
var jqxhr = $.get( "file2.php", function( data ) {
// do some thing.
alert( "Get was performed." );
});
</script>
稍后在同一 file1.php 中,稍后通过单击按钮或其他用户操作/事件处理程序,
<script>
//kill the request
jqxhr.abort();
</script>
这只是一种可能性。
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 仅为一个窗体运行应用程序脚本
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 使用几个<脚本>标签不会't工作-只调用一个脚本
- 创建一个倒计时计时器脚本,该脚本计算声音文件的持续时间,而不是特定的日期
- 从我自己的脚本中包含的Javascript文件中调用一个函数
- 在jQuery周期内触发一个谷歌时髦的脚本
- I'我用setTimeout加载脚本,你能找到一个更快的方法吗
- 一个简单的粘性头jQuery脚本的问题
- 在 jquery 中导入另一个脚本
- 运行一个特定<脚本>(Dreamweaver)
- 当源工作表添加了行时,如何编写在一个工作表中添加行的脚本
- 一个Web应用程序上有两个Java脚本
- 正在另一个脚本块中嵌入脚本块
- 按顺序异步加载JS脚本(等待上一个脚本完成)
- html或java脚本代码在硬盘中创建一个文本文件
- 创建一个html表单并使用javascript访问中的python脚本
- Firefox扩展开发:如何在内容脚本中创建一个全局函数,以便其他加载的脚本文件可以访问它
- 我很难让两个jquery脚本一个接一个地工作
- 如何使用脚本一个接一个地自动关闭IE的选项卡,这些脚本是使用批处理文件从2分钟后打开的.