针对php脚本文件执行锁定的代码,避免脚本在同一时间重复运行
2013-07-05 17:15
567 查看
<?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 !\n");
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 !\n");
}
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!\n");
}
@unlink(PHP_LOCK_FILE);
printf("php exit!\n");
}
?>
将以上代码保存为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>\n";
flush();
sleep(5);
}
?>
需要注意的是,确保phplock.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 !\n");
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 !\n");
}
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!\n");
}
@unlink(PHP_LOCK_FILE);
printf("php exit!\n");
}
?>
将以上代码保存为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>\n";
flush();
sleep(5);
}
?>
需要注意的是,确保phplock.php文件所在目录具有写入权限!
相关文章推荐
- apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法
- apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法
- apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法
- apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法
- PHP执行shell脚本运行程序不产生core文件的方法
- apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法
- apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法
- PHP执行shell脚本运行程序不产生core文件
- 在Windows命令行窗口中输入并运行PHP代码片段(不需要php文件)的方法
- 运行执行sql文件脚本的例子
- Docker - 避免启动container后运行shell脚本执行完成后docker退出container
- 把任何可执行文件(包括批处理和脚本)当作系统服务运行的工具 下载
- PHP处理SQL脚本文件导入到MySQL的代码实例
- php require_once()引入文件后,后面的代码无法执行
- PHP处理SQL脚本文件导入到MySQL的代码实例
- 运行awk脚本文件遇到不能执行问题
- 怎样才能使得htm文件如同asp文件一样可以执行脚本代码?收藏
- 常用php代码片段-脚本执行时间设置,时区设置,session开
- php循环,die/exit脚本执行控制,文件载入及错误控制
- crontab 定时执行php脚本文件