取得&自托管XML Feed

时间:2010-11-23 01:30:37

标签: xml ftp feeds fetch

我有一种情况,公司正在向我提供一个xml文件,其中包含以下限制:

  1. 用户名/密码保护
  2. 存储在他们的ftp上
  3. 我不允许从我的应用程序中引用该文件
  4. 所以我希望每小时拿出一些东西来获取xml文件(因为他们的文件每小时更新一次),然后将它托管在我自己的域中。

    有人会有任何关于创建这样的东西的建议,或者是否有任何现有的脚本可以为我做这些?

    非常感谢, 格伦

1 个答案:

答案 0 :(得分:1)

您可以使用一小段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;