dongping4273 2018-10-30 16:46
浏览 293

PHP防止代码在高并发下同时运行两次

1st Method with just 1 script via browser ( Works perfect )

$monitor_pid = "/tmp/a.lock";


$fp = fopen( $monitor_pid, 'a+' );
if ( flock( $fp, LOCK_EX | LOCK_NB ) )
{
    $pid = intval( trim( fgets( $fp ) ) );



    //RUN CODE ONCE AT A TIME


    fflush( $fp );
    flock( $fp, LOCK_UN );
}
else
{
    exit;
}

fclose( $fp );

2nd Method with shell_exec that calls another script ( Doesnt work )

<?php
 shell_exec("php test.php");
?>

And the test.php

$monitor_pid = "/tmp/a.lock";


$fp = fopen( $monitor_pid, 'a+' );
if ( flock( $fp, LOCK_EX | LOCK_NB ) )
{
    $pid = intval( trim( fgets( $fp ) ) );



    //RUN CODE ONCE AT A TIME


    fflush( $fp );
    flock( $fp, LOCK_UN );
}
else
{
    exit;
}

fclose( $fp );

Seems like in the 2nd method, the process does not care about my lock. Why that is happening? Is there any other alternative?

Thanks

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 有人会搭建GPT-J-6B框架吗?有偿
    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名