użyć lokalnego pliku cache, i po prostu sprawdzić czas istnienia i modyfikacji pliku przed jego użyciem. Na przykład, jeśli $cache_file
jest lokalna nazwa pliku cache:
if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 60 * 5))) {
// Cache file is less than five minutes old.
// Don't bother refreshing, just use the file as-is.
$file = file_get_contents($cache_file);
} else {
// Our cache is out-of-date, so load the data from our remote server,
// and also save it over our cache for next time.
$file = file_get_contents($url);
file_put_contents($cache_file, $file, LOCK_EX);
}
(. Nietestowane, ale opiera się na kodzie używam w tej chwili)
czy inaczej przez ten kod, $ plik kończy się jak dane Państwo Potrzebuję i będzie albo używać pamięci podręcznej, jeśli jest świeża, albo pobrać dane ze zdalnego serwera i odświeżyć pamięć podręczną, jeśli nie.
EDYCJA: Rozumiem trochę więcej na temat blokowania plików, ponieważ napisałem powyższe. Być może warto przeczytać artykuł this answer, jeśli niepokoi cię blokowanie pliku tutaj.
Jeżeli obawiasz się o blokowaniu i równoczesnego dostępu, powiedziałbym najczystszym rozwiązaniem byłoby file_put_contents do pliku tymczasowy, następnie rename()
to ponad $cache_file
, które powinny być operacja atomowa, czyli $cache_file
będzie może być starą zawartością lub pełną nową treścią, nigdy w połowie napisaną.
Dzięki za kod Matt! Jest super czysty, dobrze skomentowany i działa bez żadnych modyfikacji! – zsero
@zsero Cool. Ale możesz tam sprawdzić błędy :) Możesz napotkać problemy, jeśli katalog cache nie jest zapisywalny przez użytkownika serwera WWW, na przykład ... –
Tak, może to wymagać sprawdzenia błędów, ale jest to tak mały projekt, że nikt inny nie użyje ani nie wdroży tego kodu. A jeśli jest uszkodzona, druga część przechodzi w tryb bez cache zamiast hamowania. Miły. – zsero