You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9中如何通过外部更新变量终止PHP脚本执行?

实现用户触发终止运行中的PHP脚本

计划通过AJAX调用服务器设置Session变量,让运行中的脚本定期检查该变量以此判断是否停止执行。了解到两种实现方案,倾向于采用Session方案而非临时文件方案,但该方案在Laravel 9中无法正常工作。

预期效果

  • 启动第一个PHP脚本(运行约30秒)
  • 发起AJAX调用,设置Session变量stop_execution = true
  • 正在运行的第一个脚本检测到stop_execution === true,终止执行

实际表现

  • 启动第一个PHP脚本(运行约30秒)
  • 发起AJAX调用,设置Session变量stop_execution = true
  • 正在运行的第一个脚本无法检测到stop_execution === true的变化,持续运行直至结束
  • 再次启动第一个脚本时,会立即检测到stop_execution === true的变化并终止执行

推测原因是第一个脚本首次检查Session变量后,不会刷新获取新的Session变化,怀疑这和Laravel的Session处理机制有关。希望知道:

  • 是否有办法在脚本运行时强制获取最新的Session变量?
  • 是否有其他Laravel用户遇到过相同问题?

代码

初始执行的第一个脚本

private function longRunningFunction()
{
    // 每次循环检查Session变量,若为true则退出循环
    while ($condition === true && ! session('cancel_computation')) {
        // 执行业务逻辑...
    }
    // 执行完成后重置Session变量为false
    session(['cancel_computation' => false]);

    return $result;
}

AJAX调用时执行的第二个脚本

public function cancelComputationFunction()
{
    // 设置Session变量为true
    session(['cancel_computation' => true]);
}

内容的提问来源于stack exchange,提问作者leonnicklas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:05:24