Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]fileatime i nie zmieniający się czas.
Kużdo
post
Post #1





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


Witam,

Mam problem z funkcją fileatime, ponieważ sprawdzałem już na kilku hostingach (w tym localhost) i na żadnym z nich czas nie zmieniał się pomimo otwierania pliku w przeglądarce. Sprawdzałem nawet otwierając plik normalnie w środowisku, czy edytując go. Zmieniał się tylko czas z filemtime. Chciałem zrobić hosting obrazków na potrzeby małej grupki osób i zainteresowałem się tą funkcją, ponieważ chciałem zrobić to tak, że pliki byłyby kasowane np. 30 dni po ostatnim ich obejrzeniu. Ale nie wiem jak pobierać czas, skoro ten czas się nie zmienia. Są do tego jakieś inne funkcje?

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
abort
post
Post #2





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Po głębszym przyjrzeniu się problemowi okazało się, że także u mnie zarówno fileatime, jak i stat zachowują się, delikatnie mówiąc, dziwnie. W związku z tym zacząłem zgłębiać temat, przy czym ograniczyłem się do Linuksa (co nie powinno być problemem, bo większość hostingów i vpsów to jakiś tam Linux).
Okazało się, że za taki "dziwny" stan rzeczy (taki jak Ty opisujesz, jak i taki jak ja zauważyłem), odpowiada... kernel Linuksa. Niemniej, da się go przekonać, by działał tak jak trzeba. Ale po kolei. Mając filesystem zamontowany z domyślnymi opcjami działa to jak w opisie. Domyślne opcje to u mnie (z /proc/mounts):
Kod
/[device] /[mountpoint] ext3 rw,relatime,errors=continue,data=ordered 0 0

Wczytując się w manual do atime, znalazłem:
Kod
       atime  Update  inode access time for each access. See also the stricta-
              time mount option.

       noatime
              Do not update inode access times on this  filesystem  (e.g,  for
              faster access on the news spool to speed up news servers).

       relatime
              Update  inode  access  times  relative to modify or change time.
              Access time is only updated if the previous access time was ear-
              lier  than  the current modify or change time. (Similar to noat-
              ime, but doesn't break mutt or other applications that  need  to
              know  if  a  file has been read since the last time it was modi-
              fied.)

       norelatime
              Do not use relatime feature.  See  also  the  strictatime  mount
              option.

       strictatime
              Allows  to  explicitly requesting full atime updates. This makes
              it possible for kernel to defaults to relatime  or  noatime  but
              still allow userspace to override it. For more details about the
              default system mount options see /proc/mounts.

       nostrictatime
              Use  the  kernel's  default  behaviour  for  inode  access  time
              updates.


Rozwiązaniem jest przemontowanie filesystemu z opcją "strictatime":
Kod
mount -o remount,strictatime [device|katalog]


U mnie pomogło, a efekt w /proc/mounts jest taki, że zniknęło "relatime":
Kod
/[device] /[mountpoint] ext3 rw,errors=continue,data=ordered 0 0



Potestuj.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 04:10