PHPで、「file_put_contents」した後、「最終更新日時(filemtime)」を取得すると

更新前の日時が取得されます。(下記PHPソースを参照下さい)

file_put_contentsした後は、更新後の更新日時を取得したいのですが
どうすれば実現できますでしょうか?
お手数お掛けしますが、宜しくお願い致します。

<?php
$data = "";
for ($i=0; $i<5; $i++) $data .= mt_rand(1, 6);

$filename = "./test.txt";
$time = date("Y/m/d H:i:s", filemtime($filename));
echo "data:" . $data . "<br>";

echo "file_put_contents前 ファイル最終更新日時:" . $time . "<br>";

@file_put_contents($filename, $data);
@chmod($filename, 0777);

$time = date("Y/m/d H:i:s", filemtime($filename));
echo "file_put_contents後 ファイル最終更新日時:" . $time . "<br>";

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2016/01/05 19:03:00
  • 終了:2016/01/05 20:30:26

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4363ベストアンサー獲得回数18002016/01/05 20:01:29

ポイント100pt

パフォーマンスを稼ぐために、結果がキャッシュされています。

注意: この関数の結果は キャッシュされます。詳細は、clearstatcache() を参照してください。

PHP: filemtime - Manual

statやlstat、 またはその他の関数(後述)を使用すると、PHPはパフォーマンス向上のために それらの関数の戻り値をキャッシュします。しかし、ケースによっては、 キャッシュされた情報を消去したい場合もあるでしょう。 例えば、一つのスクリプト上で同じファイルが何度もチェックされ、 そのファイルが変更されたり削除されたりする可能性がある場合、 ステータスキャッシュを消去しなければならないと感じるでしょう。 このようなケースでは、clearstatcache()を使用することで ファイルの情報に関してPHPが持っているキャッシュをクリアすることができます。

PHP: clearstatcache - Manual

キャッシュされているのはパフォーマンスのことを考えてなので、ファイル名を指定してキャッシュをクリアした方が良いかもしれません。

<?php
    ...

    file_put_contents($filename, $data);
    chmod($filename, 0777);

    // 該当ファイルのキャッシュをクリアする
    clearstatcache(false, $filename);

    $time = date("Y/m/d H:i:s", filemtime($filename));
id:misaex

ありがとうございます!
助かりました。

すみません、マニュアルしっかり読みたいと思います。

2016/01/05 20:31:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません