今回は、PHP でファイル ロックを使用して同時実行性の高さを解決する手順について詳しく説明します。PHP でファイル ロックを使用して同時性の高さを解決するための 注意事項 は何ですか?実際のケースを見てみましょう。 。
ファイルには何も書き込まずに、新しい .txt ファイルを作成します。【1】. ブロッキング(待機)モード: (他のプロセスがファイルをロックしている限り、現在のプロセスは他のプロセスがファイルのロックを解除するのを待ちます)
<?php //连接数据库 $con=mysqli_connect("192.168.2.186","root","root","test"); //查询商品数量是否大于0,大于0才能下单,并减少库存 $fp = fopen("lock.txt", "r"); //加锁 if(flock($fp,LOCK_EX)) { $res=mysqli_fetch_assoc(mysqli_query($con,'SELECT total FROM shop WHERE id=1 LIMIT 1')); if($res['total']>0){mysqli_query($con,'UPDATE shop SET total=total-1 WHERE id=1');} //执行完成解锁 flock($fp,LOCK_UN); } //关闭文件 fclose($fp); unset($res); mysqli_close($con); ?>
【2】ノンブロッキング (待機) モード: (他のプロセスがファイルをロックしている限り、現在のプロセスは他のプロセスがファイルのロックを解除して直接戻るのを待ちません)
<?php //连接数据库 $con=mysqli_connect("192.168.2.186","root","root","test"); //查询商品数量是否大于0,大于0才能下单,并减少库存 $fp = fopen("lock.txt", "r"); //加锁 if(flock($fp,LOCK_EX | LOCK_NB)) { $res=mysqli_fetch_assoc(mysqli_query($con,'SELECT total FROM shop WHERE id=1 LIMIT 1')); if($res['total']>0){mysqli_query($con,'UPDATE shop SET total=total-1 WHERE id=1');} //执行完成解锁 flock($fp,LOCK_UN); } //关闭文件 fclose($fp); unset($res); mysqli_close($con); ?>
<?php $fp = fopen("file_lock.txt", "r"); // 加锁 if(flock($fp, LOCK_EX)) { sleep(10); echo 1; //执行完成解锁 flock($fp,LOCK_UN); } else { echo 2; } //关闭文件 fclose($fp);
<?php $fp = fopen("file_lock.txt", "r"); // 加锁(如果改成flock($fp, LOCK_EX | LOCK_NB),demo2.php会直接返回2,否则会等待demo.php执行完返回1) if(flock($fp, LOCK_EX)) { echo 1; } else { echo 2; } //关闭文件 fclose($fp);
以上がPHP ファイル ロックを使用して同時実行性の問題を解決する手順の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。