Получение и самостоятельное размещение XML-канала - PullRequest
0 голосов
/ 23 ноября 2010

У меня есть ситуация, когда компания предоставляет мне xml-файл со следующими ограничениями:

  1. Имя пользователя / пароль защищены
  2. Хранится на их ftp
  3. Мне не разрешено ссылаться на файл из моего приложения

Так что я надеялся придумать что-нибудь, что будет извлекать файл XML каждый час (так как их файл обновляется ежечасно), и размещать его намой собственный домен.

У кого-нибудь есть какие-либо предложения по созданию чего-то подобного, или есть какие-нибудь существующие сценарии, которые могли бы сделать это для меня?

Большое спасибо, Глен

1 Ответ

1 голос
/ 23 ноября 2010

Вы можете использовать простой бит PHP для кэширования удаленного файла и предоставления локальной копии.

На основе этого PHP Remote File Cache вы можете сделать что-то вроде этого (не проверено):

<?php
$url = 'ftp://username:password@server.domain.com/folder/file.ext';
#we need to do some caching here
$cache_dir = dirname(__FILE__) . '/cache/'; // directory to store the cache
$cache_file = $cache_dir . md5($url);
$cache_time = 1 * 60 * 60; // time to cache file, # minutes * seconds

// check the cache_dir variable
if (is_dir($cache_dir) && 
    is_writable($cache_dir) && 
    file_exists($cache_file) && 
    (time() - $cache_time) < filemtime($cache_file)) {
    $data = file_get_contents($cache_file); // name of the cached file
}
else {
    $data = file_get_contents($url);
    file_put_contents($cache_file, $data); //go ahead and cache the file
}


// Compress output if we can.
if (function_exists('ob_gzhandler')) {
    ob_start('ob_gzhandler');
}


header('Content-type: text/xml; charset=UTF-8'); // Change this as needed
// think about client side caching...
header('Cache-Control: must-revalidate');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache_time) . ' GMT');
echo $data;
exit;
...