并发下日志写入方案
$fp = fopen(APP_PATH."/Lib/Pay/pay_log/test_log.txt","a+");
if(flock($fp,LOCK_EX)) fwrite($fp,"1\n");
fclose($fp);
//并发下调用接口示例
public function test(){
$id = 1;
//先打开一个文件(已经存在的文件可任意模式打开,不存在的文件不能用r和r+模式)
$fp = fopen(APP_PATH."Lib/Pay/pay_log/test_log.txt","r");
//打开后给北方网的文件加独占锁 用以阻塞执行代码期间 其它进程对这个文件的访问 让其它进程处于等待状态
if(flock($fp,LOCK_EX)){
//以下进行业务逻辑的处理
$list = M("test")->where("id={$id}")->find();
if($list && $list['status']<1){
$add_data['test_id'] = $id;
$add_data['time'] = time();
$add_rus = M("test_log")->add($add_data);
if($add_rus){
$save_data['id'] = $id;
$save_data['status'] = 1;
$up_rus = M('test')->save($save_data);
}
}
}
//关闭文件 释放独占锁 使其它进程继续访问
fclose($fp);
}
时间: 2024-09-09 03:10:47