首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止PHP脚本同时运行一次以上的最佳方法?

防止PHP脚本同时运行一次以上的最佳方法?
EN

Stack Overflow用户
提问于 2016-03-18 08:12:13
回答 1查看 858关注 0票数 1

我有一个长时间运行的脚本(根据设置,从30到160秒不等),它使用NuSOAP从API请求数据,基于这些数据它构建了一个很大的~1000-4000行插入查询。它会截断一个表并插入大查询。

当我一个接一个地运行这些脚本时,它会产生一个丢失数据的问题。我想防止这个脚本同时运行两次。

这个脚本将来也将通过cron/任务调度程序每5-10分钟运行一次。

目前,我通过检查文件是否存在来阻止同时运行脚本:

代码语言:javascript
复制
<?php
    header('content-type: application/json');
    ignore_user_abort(true);

    if (!file_exists('lock.txt')) {
        $lock = fopen('lock.txt','w');
        fclose($lock);

        //~450 API requests using NuSOAP.
        //TRUNCATE `table`
        //INSERT ~1000-4000 rows into `table

        $jsonArray = array(utf8_encode('script')=>utf8_encode('finished'));
        unlink('lock.txt');
    } else {
        $jsonArray = array(utf8_encode('script')=>utf8_encode('locked'));
    }
    echo json_encode($jsonArray);
?>

这是阻止脚本同时运行的安全方法吗?最好是检查MySQL列是否包含“true”或“false”,而不是一个文件?

有更好的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-03-18 08:21:09

我认为锁文件可能不是理想的,我宁愿创建一个临时会话变量来检查'True‘或'False’,以确定脚本是否正在运行。

另外,我还可以跟踪执行每个脚本所需的实际时间,这对于检查不必要的时间和总体平均时间非常有用。

即使您通过CRON运行脚本,在使用session_id()之前手动分配session_start(),您仍然能够使用会话。

然而,Cookies将是浏览器依赖的,它将不能与Cron一起工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36079250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档