ホームページ > バックエンド開発 > PHPチュートリアル > CURLによるPHPの同時リクエスト数

CURLによるPHPの同時リクエスト数

WBOY
リリース: 2016-06-23 13:49:32
オリジナル
1153 人が閲覧しました

関数累積番号() {
$file = "number.txt";
$current = (empty($current)) 1 : (int)$current + 1; (!file_put_contents($file, $current, LOCK_EX)) {
cumulative_number();
return $current; }

この関数でカウントを実装したいのですが、問題が発生します。同時に、このカウントにも問題が発生します。問題は、同時にアクセスする場合、ファイルの内容を同時に読み取るアクセスが複数あることです。書き込み時のロック保護はありますが、書き込まれたテキストは同じ内容であるため、問題が発生します。数えること。

ファイルを読み取るときにロックのような機能を適用する方法がわかりません。助けてください



ディスカッションへの返信(解決策)

http://www.php Thinking.com/archives/220

兄弟、あなたが提供した情報は、この問題に対して外部の世界に関連する影響を与えません

http://www .php Thinking.com/archives/220



$fn = 'count.txt';if(! file_exists($fn)) file_put_contents($fn, 1);$fp = fopen($fn, 'r+');if(flock($fp, LOCK_EX | LOCK_NB)) {  $n = fgets($fp);  rewind($fp);  fputs($fp, $n+1);}flock($fp, LOCK_UN);
ログイン後にコピー
ログイン後にコピー

申し訳ありませんが、モデレータのやり方も問題を引き起こしているようです。同時アクセス数が少なければ問題ありませんが、アクセス数が多いと問題が発生します。

rree



数日間不在だったのに、また来ましたか?

このコードは、遅くとも翌日には応答があると思っていましたが、予想していませんでした。数日後になります

LOCK_NB を削除するだけです

テスト コード

$fn = 'count.txt';if(! file_exists($fn)) file_put_contents($fn, 1);$fp = fopen($fn, 'r+');if(flock($fp, LOCK_EX | LOCK_NB)) {  $n = fgets($fp);  rewind($fp);  fputs($fp, $n+1);}flock($fp, LOCK_UN);
ログイン後にコピー
ログイン後にコピー


file_count.php
$mh = curl_multi_init();for($i=0; $i<1000; $i++) {       $conn[$i]=curl_init("http://localhost/file_count.php?i=$i");       curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);       curl_multi_add_handle ($mh,$conn[$i]);}do { $n=curl_multi_exec($mh,$active); } while ($active);foreach ($conn as $ch) {       $res[] = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL) . ' ' .curl_multi_getcontent($ch);       curl_close($ch);}print_r($res);
ログイン後にコピー


<?php$fn = 'count.txt';if(! file_exists($fn)) file_put_contents($fn, 1); $fp = fopen($fn, 'r+');if(flock($fp, LOCK_EX /*| LOCK_NB*/)) {  $n = fgets($fp);  rewind($fp);  fputs($fp, $n+1);}flock($fp, LOCK_UN);echo microtime(1) . "  $n";
ログイン後にコピー

シミュレートされた同時アクセス コードは次のとおりです

モデレータの協力に感謝します。問題は基本的に解決されました。ただし、アクセス数が非常に多い場合に問題が発生するかどうかはわかりません。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート