0

私は次の基本的なPHPを使用していました。

<?php

    if (file_exists('count_file.txt')) 
    {
        $fil = fopen('count_file.txt', r);
        $dat = fread($fil, filesize('count_file.txt')); 
        echo $dat+1;
        fclose($fil);
        $fil = fopen('count_file.txt', w);
        fwrite($fil, $dat+1);
    }

    else
    {
        $fil = fopen('count_file.txt', w);
        fwrite($fil, 1);
        echo '1';
        fclose($fil);
    }
?>

ヒットカウンターとして(私はむしろ持っていたくないのですが、私たちが持っていると主張されています)。txtファイルはヒット数を保持し、機能します...ただし、カウンターはランダムに(場合によっては数週間後、場合によっては数か月後に)トリップして、たとえば4300から11に低下します。

これに対する修正はファイルロックを使用することであると言われたので、次のコードに変更しました。

<?php 

        $dat = file_get_contents('count_file.txt'); 
        $fil = fopen('count_file.txt', 'w'); 
        if (flock($fil, LOCK_EX)) { 
            echo $dat+1; 
            fwrite($fil, $dat+1); 
            flock($fil, LOCK_UN); 
        } 
        fclose($fil); 

    ?> 

そして今、数日後、それは再び5000以上から13に落ちました。なぜ誰かが何か考えを持っていますか?

4

2 に答える 2

1

ファイルを切り捨てる書き込み用のファイルをfopen()します。ロックを取得できない場合は、ファイルを閉じます。ファイルは切り捨てられ、ゼロバイトになる可能性があります。

于 2012-07-18T08:50:29.807 に答える