仅在网页上显示时才在php中临时存储图像

时间:2010-01-15 06:54:23

标签: php symfony1

我想从其他网站获取图片并在我的网站上显示。我只想在页面上显示时将这些图像临时存储在我身边,以便用户认为图像来自我的网站。这可能吗?怎么样?提前谢谢。

例如: - 想象一下,服务器中生成了一些图形(某些网络监控图形,如冒烟),这些图形以.png格式存储在文件夹中。

例如: - imagine_this_url_has_a_graph(但这只是一个页面)

以便用户想要在其他网站上显示这些图表。

3 个答案:

答案 0 :(得分:1)

一个简单的缓存系统就可以做到这一点。给定一个HTML文件:

<body>
 <img src="imagesource.php?file=1" />
</body>

您可以创建图像数据源(imagesource.php),如:

<?php
$files = array(
   'http://somesite.com/image_to_cache.gif',
   'http://somesite.com/image_to_cache2.gif'
);

if(!isset($_REQUEST['file']) || !isset($files[$_REQUEST['file']])) {
   header('HTTP/1.0 404 Not Found');
   exit;
}

// do we already have the cached file?
$requested_file = $files[$_REQUEST['file']];
$cache_dir = '/tmp/cached_images';
$cache_file = md5($requested_file);
$cache_path = $cache_dir . '/' . $cache_file;

header('Content-Type: image/gif');

if(file_exists($cache_path)) {
   readfile($cache_path);
   exit;
}

//need to create the cache.
$data = file_get_contents($requested_file);
file_put_contents($cache_path, $data);

echo $data;

如果尚未下载远程图像,则会在本地缓存它们,并在请求时将它们输出到浏览器。

答案 1 :(得分:0)

当针对您的服务器发出图像请求时,只需使用fopen()打开远程图像,然后fpassthru()将其传递出来。

答案 2 :(得分:0)

如果你想输出你的图像,请使用fileread()而不是fopen(),否则你会收到错误。