4

これは簡単に思えますが、私には理解できません。

file_get_contents('count.txt');
$variable_from_file++;
file_put_contents('count.txt', $variable_from_file);

データは 1 行だけでcount.txt、ヒット カウンターです。これを行う方法はありますか?

4

5 に答える 5

13

カウントされない増分がないことを確認したい場合 (CodeCaster が参照しているのは、スクリプトが count.txt を読み込んで増分し、別のファイルが同じことを行っている間にそれを保存してから、1 つの増分のみが行われる可能性があることです)。適切な 2 つではない)、使用する必要がありますfopen

$fp = fopen('count.txt', 'c+');
flock($fp, LOCK_EX);

$count = (int)fread($fp, filesize('count.txt'));
ftruncate($fp, 0);
fseek($fp, 0);
fwrite($fp, $count + 1);

flock($fp, LOCK_UN);
fclose($fp);

これにより、ファイルがロックされ、カウントがインクリメントされている間、他の人がそのファイルを読み書きできなくなります (つまり、他のユーザーは値をインクリメントする前に待機する必要があります)。

于 2012-06-04T00:20:56.590 に答える
3
$variable_from_file = (int)file_get_contents('count.txt');

ただし、これはスレッドセーフではないことに注意してください。

于 2012-06-04T00:02:02.417 に答える
2

あなたがしたのとまったく同じように、それはうまくいくはずです。からデータをキャプチャし、file_get_contents()これらの機能の両方が成功したかどうかを確認するだけです。

$var = file_get_contents('count.txt');
if ($var === false) {
    die('Some error message.');
}
$var++;
if (file_put_contents('count.txt', $var) === false) {
    die('Some error message.');
}
于 2012-06-04T00:03:00.810 に答える
1

これは私にとってはうまくいきますが

$count = intval(file_get_contents('count.txt'));
file_put_contents('count.txt', ++$count);
echo file_get_contents('count.txt');
于 2012-06-04T00:14:41.457 に答える