php 防止curl并发-文件锁

如果出现多个curl请求同时进行,导致数据库重复插入数据的情况,可以通过文件锁来防止重复插入数据库,实现代码如下:

//文件锁防止进程重复并发
    $folder = '/tmp';

    $lock = $folder . "/send_count.lock";

    $fp = fopen($lock, 'c');

    if(!flock($fp, LOCK_EX | LOCK_NB)){
        exit('其他进程正在运行中');
    }

    /*
     *
     * 所需执行的代码
     *
     * */

    //执行完后关闭文件,防止堵塞
    fclose($fp);

测试文件锁的效果可以使用以下代码,进行测试:


//实现并发curl请求函数
function multiRequestUrl($url, $multi_num = 2) {

    $curly = array();

    $result = array();


    $mh = curl_multi_init();

    $data = [];

    $data = array_pad($data,$multi_num,$url);

    foreach ($data as $id => $d) {

        $curly[$id] = curl_init();

        $url = $d;
        curl_setopt($curly[$id], CURLOPT_URL,            $url);
        curl_setopt($curly[$id], CURLOPT_HEADER,         0);
        curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);


        curl_multi_add_handle($mh, $curly[$id]);
    }


    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while($running > 0);


    foreach($curly as $id => $c) {
        $result[$id] = curl_multi_getcontent($c);
        curl_multi_remove_handle($mh, $c);
    }

    curl_multi_close($mh);

    return $result;
}
//指定并发次数
$multi_num = 2;
//并发测试
$re = multiRequestUrl($url,$multi_num);

//打印并发结果
var_dump($re);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值