2

テキスト ファイルの値を増やすプログラムを PHP で既に作成しましたが、複数のユーザーが同じ PHP スクリプトを同時に使用すると、これがうまくいかない可能性があると言われました。

この問題を解決する方法またはより良い方法を知っている人はいますか? 必要なのは、ボタンのクリック数を数えて保存し、別のページに表示することだけです。

これは私のコードです:

<?php

    $clicks = file_get_contents("clicks.txt");
    $clicks++;

        $fp = fopen("clicks.txt", "w+");
        fwrite($fp, $clicks);
        fclose($fp);

//give the count to the user
echo "result: $clicks";

    ?>
4

4 に答える 4

0

問題が発生する理由は、2 つのものが同時にファイルに書き込もうとした場合です。ファイルに書き込む前にファイルをロックすることで、これを回避できます。PHPにはflock.

排他ロックLOCK_EXを取得すると、ファイルへの書き込みは許可されますが、それ以外は許可されません。したがって、これを行うと、スクリプトの 1 つのインスタンスのみがいつでも書き込み可能になります。スクリプトがロックを取得できない場合は、別の何かがファイルに書き込みを行っていることを意味するため、もう一度試すか、エラーをスローすることができます。

の PHP ドキュメントの例flock:

$fp = fopen("/tmp/lock.txt", "r+");

if (flock($fp, LOCK_EX)) {  // acquire an exclusive lock
    ftruncate($fp, 0);      // truncate file
    fwrite($fp, "Write something here\n");
    fflush($fp);            // flush output before releasing the lock
    flock($fp, LOCK_UN);    // release the lock
} else {
    echo "Couldn't get the lock!";
}

fclose($fp);

これを実際に適用するには、データベースを使用して、監視するすべてのクリックに対して行を挿入します。時間、その人がどのページにいたかなど、各クリックに関する詳細情報も保存できます。次に、データベースにクエリを実行して、これらすべての統計を取得できます。この問題を完全に回避できます。

更新:チュートリアルについては、このページをお読みください。

于 2012-06-16T21:06:49.500 に答える
0

私の意見では、クリック数をカウントする最善の方法についての質問への答えは、無料の Google アナリティクス アカウントを使用することです。

どうしても自分でやりたい場合は、各クリックに関する情報をデータベースに記録し、そのデータを興味深い表示可能な結果に変換する必要があります。

これらのことのいずれかを行う気がない場合、有効率は急激に低下します。その場合、すでに使用している方法は、狭い範囲を考えると、すでにほぼ最良の方法です.

于 2012-06-16T21:21:08.867 に答える
0

データベースを使用します。たとえば、Mysql は、データベース トランザクションの ACID 保証を提供できます。

于 2012-06-16T21:07:33.480 に答える
-1

ページを更新しても構わない場合は、非表示のフィールドを含むフォームを送信し、データベースの数値を増やしてください。

クリックを保存するためにページを更新したくない場合は、AJAX 要求をサーバーに発行して、同じことを再度行います。必要に応じてデータベースまたはファイルに保存します。

于 2012-06-16T21:04:01.623 に答える