一、中奖率,先在后台设定好奖项名称,抽奖份数,以及中奖百分比
奖品表draw
二、 借助文件排他锁,在处理下单请求的时候,用flock锁定一个文件,如果锁定失败说明有其他订单正在处理,此时要么等待要么直接提示用户"服务器繁忙"
阻塞(等待)模式,一般都是用这个模式,排队式抽奖,一个人抽完再到下一位
<?php
$fp = fopen("lock.txt", "w+"); if(flock($fp,LOCK_EX)) { //..处理订单 flock($fp,LOCK_UN); } fclose($fp); ?>
非阻塞模式
<?php
$fp = fopen("lock.txt", "w+"); if(flock($fp,LOCK_EX | LOCK_NB)) { //..处理订单 flock($fp,LOCK_UN); } else { echo "系统繁忙,请稍后再试"; } fclose($fp); ?>
完整php代码 ,文件锁进行防高并发(在目录下添加一个lock.txt),通过百分比计算出抽奖率,随机抽取一份奖品
public function draw(){ //文件锁进行防高并发 $fp = fopen("lock.txt", "w+"); if(flock($fp,L