php fileatime について


fileatime で取得できる時刻は、「ファイルの最終アクセス時刻」とありますが、ある画像のURLをブラウザのアドレスバーに入力して表示しても、この時刻は更新されません。

しかし、phpで下記の様にして表示すると更新されます。

header("Content-type: image/jpg");
print file_get_contents("hoge.jpg");

また、FTPソフトで、サーバ内の画像をプレビューしても時刻は更新されました。

「ファイルの最終アクセス時刻」とありますが、
どういう時に、この時刻が更新されるのか教えて下さい。

宜しくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2017/01/28 14:40:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント50pt

ある画像のURLをブラウザのアドレスバーに入力して表示しても、この時刻は更新されません。

ブラウザのキャッシュが効いているからじゃないでしょうか。
ctrl+F5 で強制読み込みすると、最終アクセス時刻が更新されると思います。

php のコードでファイルをアクセスすると最終アクセス時刻が更新されるのは、その php を動かす URL が毎回動くからです。
Last-Modified や Cache-Control ヘッダを返してキャッシュが効くようにすると、2回目以降は最終アクセス時刻は更新されないと思います。

他2件のコメントを見る
id:a-kuma3

さくらの共用サーバだと、ぱっとググった感じではキャッシュサーバを通してる感じは無さそうですが、apache のキャッシュ制御を使っている可能性はあります。
https://httpd.apache.org/docs/2.4/caching.html

2017/01/21 19:23:32
id:worldtravel

ありがとうございました。
わからないので、とりあえず、後回しにしました。

下記の様に書かれているので、そういう風に設定しているのかもしれませんね。


http://php.net/manual/ja/function.fileatime.php
> 注意:
> ァイルの atime は、 ファイルのデータブロックが読み込まれる度に変更されるとみなされます。 この仕様は、アプリケーションが非常に多くのファイルまたはディレクトリに 常にアクセスする場合に性能上の負荷となる可能性があります。
> Unix のファイルシステムの中には、 このようなアプリケーションの性能を向上させるために atime の更新を無効としてマウントできるものもあります。 USENET のニューススプールが一般的な例です。 このようなファイルシステムでは、この関数は使用できません。

2017/01/30 00:15:50

その他の回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント50pt

ある画像のURLをブラウザのアドレスバーに入力して表示しても、この時刻は更新されません。

ブラウザのキャッシュが効いているからじゃないでしょうか。
ctrl+F5 で強制読み込みすると、最終アクセス時刻が更新されると思います。

php のコードでファイルをアクセスすると最終アクセス時刻が更新されるのは、その php を動かす URL が毎回動くからです。
Last-Modified や Cache-Control ヘッダを返してキャッシュが効くようにすると、2回目以降は最終アクセス時刻は更新されないと思います。

他2件のコメントを見る
id:a-kuma3

さくらの共用サーバだと、ぱっとググった感じではキャッシュサーバを通してる感じは無さそうですが、apache のキャッシュ制御を使っている可能性はあります。
https://httpd.apache.org/docs/2.4/caching.html

2017/01/21 19:23:32
id:worldtravel

ありがとうございました。
わからないので、とりあえず、後回しにしました。

下記の様に書かれているので、そういう風に設定しているのかもしれませんね。


http://php.net/manual/ja/function.fileatime.php
> 注意:
> ァイルの atime は、 ファイルのデータブロックが読み込まれる度に変更されるとみなされます。 この仕様は、アプリケーションが非常に多くのファイルまたはディレクトリに 常にアクセスする場合に性能上の負荷となる可能性があります。
> Unix のファイルシステムの中には、 このようなアプリケーションの性能を向上させるために atime の更新を無効としてマウントできるものもあります。 USENET のニューススプールが一般的な例です。 このようなファイルシステムでは、この関数は使用できません。

2017/01/30 00:15:50
id:disillusionist No.2

回答回数40ベストアンサー獲得回数17

ポイント50pt

こういうのは関係ないのだろうか

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

http://php.net/manual/ja/function.fileatime.php

他1件のコメントを見る
id:disillusionist

ああ、そうなんだ。いやこの辺見たけど何だかよく分からなかったんですよね(爆)

http://d.hatena.ne.jp/i_ogi/20080506/1210062971
http://stackoverflow.com/questions/18097432/does-file-get-contents-use-a-cache

2017/01/24 20:32:14
id:worldtravel

ありがとうございました。

2017/01/30 00:16:03

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

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

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

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

回答リクエストを送信したユーザーはいません