php fileatime について


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

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

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

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

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

宜しくお願いします。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2017/01/21 14:38:27
  • 終了:2017/01/28 14:40:03

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4505ベストアンサー獲得回数18702017/01/21 16:00:20

ポイント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

a-kuma3回答回数4505ベストアンサー獲得回数18702017/01/21 16:00:20ここでベストアンサー

ポイント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

disillusionist回答回数40ベストアンサー獲得回数172017/01/22 14:22:59

ポイント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

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

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

Twitterでのつぶやき (0)

Twitterでのつぶやきはまだありません

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

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

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