从外部json feed本地缓存图像

时间:2014-02-26 15:14:15

标签: php xml json caching rss

我目前正在使用wordpress Feed来显示帖子的网站上工作。一切似乎都运行正常,但页面加载速度非常慢。我已经实现了自己的缓存,这意味着只会每两个小时查询一次Feed(参见下面的代码)。

$cacheFile =  'cached-data/data.txt';

$cacheData = file_get_contents($cacheFile);   
$two_hours = time() - 1;
$cacheTime = filemtime($cacheFile);

if ($cacheTime > $two_hours)
{
    $dataArray = $cacheData;
}
else
{
    //get data
    $historyData = file_get_contents('http://www.mysite.co.uk/feed/json?image=thumbnail&posts_per_page=5');
    $historyData = json_decode($historyData,true);

    $animalData = file_get_contents('http://www.mysiteothersite.co.uk/feed/json?image=thumbnail&posts_per_page=5');
    $animalData = json_decode($animalData,true);


    $dataArray = array_merge($historyData['posts'],$animalData['posts']);       

    $dataArray = json_encode($dataArray);

    $newCachFile = fopen($cacheFile, 'wb');
    fwrite($newCachFile, $dataArray);
    fclose($newCachFile);


}

$dataArray = json_decode($dataArray,ARRAY_A);

这加快了速度,但图像加载时间仍然很慢。因此,我想实现一个每小时下载一次图像的功能,并修改下载的json,以便将图像URL替换为本地托管的图像,而不是从服务器下载的图像。

有人可以建议我如何在本地保存图像吗?

由于

1 个答案:

答案 0 :(得分:1)

您可以使用file_get_contents获取图像数据,使用file_put_contents将图像保存到文件系统。然后修改JSON就像更改JSON解码数组中的值一样简单,然后重新编码它。

//example for JPEG image
$image = file_get_contents($imageUrl);
file_put_contents('MyImage.jpg', $image);