zoukankan      html  css  js  c++  java
  • 针对php脚本文件执行锁定的代码,避免脚本在同一时间重复运行

    <?php
    //针对php脚本文件执行锁定的代码,避免脚本在同一时间重复运行,http://ken.01h.net/
    define('PHP_LOCK_FILE', dirname(__FILE__) . '/php.lock');
    ini_set('display_errors', true);
    ini_set('error_reporting', E_ALL);
     
    global $php_lock_fp;
    $php_lock_fp = @fopen(PHP_LOCK_FILE, "w+") or die("Couldn't open the lock file ! ");
     
    if (flock($php_lock_fp, LOCK_EX + LOCK_NB)) {   //排它型锁定
     register_shutdown_function('php_release_lock');  //当脚本结束时执行该方法,用于解锁
     fwrite($php_lock_fp, getmypid());
    } else {
     @fclose($php_lock_fp);
     exit("Couldn't lock the file ! ");
    }
     
    function php_release_lock()
    {
     global $php_lock_fp;
     if(is_resource($php_lock_fp)){
      flock($php_lock_fp, LOCK_UN);  //释放锁定
      @fclose($php_lock_fp);
      printf("Release lock! ");
     }
     @unlink(PHP_LOCK_FILE);
     printf("php exit! ");
    }
    ?>

    将以上代码保存为phplock.php文件,在需要用到锁定功能的脚本代码中引入该文件即可,示例如下:

    <?php

    set_time_limit(0);
    require(dirname(__FILE__) . '/phplock.php');  //引入脚本文件锁定代码
     
    //test
    for($i=0; $i<10; $i++){
     echo str_repeat(" ", 1024);  //照顾一下像Firefox这种有比较大的缓冲区的浏览器
     echo $i."<br> ";
     flush();
     sleep(5);
    }
    ?> 

     需要注意的是,确保phplock.php文件所在目录具有写入权限!

  • 相关阅读:
    Python 从零学起(纯基础) 笔记 之 collection系列
    ARM学习 之 如何在向内核写入系统调用
    idea的git使用案例
    idea使用git的pull命令报错1
    String、StringBuilder以及StringBuffer
    HashMap实现原理及源码分析
    logback使用注意点1
    创建zookeeper集群
    disconf安装问题
    linux更换jdk版本
  • 原文地址:https://www.cnblogs.com/helloyb/p/3174035.html
Copyright © 2011-2022 走看看