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
相关产品推荐
相关产品推荐

