Используйте файл локального кэша и просто проверьте наличие и время изменения файла, прежде чем использовать его. Например, если $cache_file
- имя файла локального кэша:
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);
}
(не проверено, но на основе кода, который я использую в настоящее время.)
В любом случае, используя этот код, $ file в конечном итоге получит необходимые данные, и он будет использовать кеш, если он свежий, или получить данные с удаленного сервера и обновить кеш, если нет.
РЕДАКТИРОВАТЬ: я понимаю немного больше о блокировке файлов, так как я написал выше. Возможно, стоит прочитать этот ответ , если вы беспокоитесь о блокировке файла здесь.
Если вы беспокоитесь о блокировке и одновременном доступе, я бы сказал, что самым чистым решением было бы file_put_contents для временного файла, тогда rename()
над $cache_file
, которая должна быть атомарной операцией, т.е. $cache_file
будет либо старым содержимым, либо полным новым содержимым, никогда не написанным наполовину.