Да, это более чем приемлемая практика, это рекомендуется при работе с удаленными ресурсами.
В руководстве PEAR и других librairies есть универсальные менеджеры кэшей, но в вашем случае простое домашнее решение будет работать так же хорошо. Нечто подобное:
function get_xml($url, $max_age)
{
$file = '/path/to/cache/dir/' . md5($url);
if (file_exists($file)
&& filemtime($file) >= time() - $max_age)
{
// the cache file exists and is fresh enough
return simplexml_load_file($file);
}
$xml = file_get_contents($url);
file_put_contents($file, $xml);
return simplexml_load_string($xml);
}
Давай думать об этом, вы можете использовать copy()
получить ресурс. В большинстве случаев это не имеет никакого значения, но немного более мягко относится к менеджеру памяти PHP, если внешний ресурс просто очень большой. Но даже тогда, если вы загружаете огромный XML в памяти у вас есть большие проблемы, чем то, как вы его скачать :)
function get_xml($url, $max_age)
{
$file = '/path/to/cache/dir/' . md5($url);
if (!file_exists($file)
|| filemtime($file) < time() - $max_age)
{
// the cache file doesn't exists or is not fresh enough
copy($url, $file);
}
return simplexml_load_file($file);
}
О, и я почти забыл. Это лучший и простой способ сделать это, если у вас есть доступ к некоторой функции cron. Просто настройте задание cron, которое безостановочно загружает этот удаленный ресурс каждые 5 или 10 минут. Затем пусть ваш PHP-скрипт безоговорочно прочитает из файла кеша и вообще не беспокоится о удаленном ресурсе. Таким образом, сценарий «наихудшего случая» с точки зрения латентности отсутствует. В противном случае каждый раз, когда ваш скрипт обновляет ваш кеш, он заставляет пользователя ждать заметно больше, чем если бы он был извлечен из кеша.
ли удаленный серв er как-то указать, как долго вы можете/должны кэшировать ресурс? – VolkerK
Нет, мне просто интересно, как люди склонны справляться с этим. Я думаю, что вкладка cron - это, вероятно, путь. – rrrfusco