1

あるPHPスクリプト内からファイルに触れて、このファイルが別のスクリプト内から最後に触れられた時刻を読み取る必要がありますが、ファイルに触れて変更日を読み取っても、変更日は変わりません。以下は次のとおりです。テストファイル。

ログファイルに触れて変更日を変更し、この変更日を読み取るにはどうすればよいですか?

class TestKeepAlive {

    protected $log_file_name;

    public function process() {
        $this->log_file_name = 'test_keepalive_log.txt';
        $this->_writeProcessIdToLogFile();

        for ($index = 0; $index < 10; $index++) {
            echo 'test' . PHP_EOL;
            sleep(1);
            touch($this->log_file_name);
            $this->_touchLogFile();
            $dateTimeLastTouched = $this->_getDateTimeLogFileLastTouched();
            echo $dateTimeLastTouched . PHP_EOL;
        }
    }

    protected function _touchLogFile() {
        //touch($this->log_file_name);
        exec("touch {$this->log_file_name}");
    }

    protected function _getDateTimeLogFileLastTouched() {
        return filemtime($this->log_file_name);
    }

    protected function _writeProcessIdToLogFile() {
        file_put_contents($this->log_file_name, getmypid());
    }

}

$testKeepAlive = new TestKeepAlive();
$testKeepAlive->process();
4

1 に答える 1

3

PHPマニュアルclearstatcacheにある関数を使用する必要があります

PHPは、より高速なパフォーマンスを提供するために、これらの関数(filemtime)が返す情報をキャッシュします。ただし、場合によっては、キャッシュされた情報をクリアしたいことがあります。たとえば、同じファイルが1つのスクリプト内で複数回チェックされており、そのファイルがそのスクリプトの操作中に削除または変更される危険がある場合は、ステータスキャッシュをクリアすることを選択できます。このような場合、clearstatcache()関数を使用して、PHPがファイルに関してキャッシュする情報をクリアできます。

働き:

protected function _getDateTimeLogFileLastTouched() {
    clearstatcache();
    return filemtime($this->log_file_name);
}
于 2013-02-04T17:19:01.087 に答える