人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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>";


●質問者: misaex
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●100ポイント ベストアンサー

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

注意: この関数の結果は キャッシュされます。詳細は、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));

misaexさんのコメント
ありがとうございます! 助かりました。 すみません、マニュアルしっかり読みたいと思います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ