PHP这是一种更好的方式来提供其URL存储在数据库中的图像

时间:2013-11-01 13:32:14

标签: php image performance amazon-s3

在PHP应用程序中,我提供的图像是这样的:

<img src="http://www.example.com/image/view/93029420" />

在后端它会做这样的事情:

$query = "SELECT img_url FROM images WHERE image_id = '93029420'";

$result = DB.findOne($query);

$contents = file_get_contents($result['img_url'] );
header('Content-Type: image/png');
echo $contents;
exit(); 

存储在数据库中的图像网址是一个像亚马逊这样的cdn。所以它可能像https://images.mybucket.s3.com/slippers.png。使用该方法显示图像或使用像:

这样的重定向会更好吗?
$query = "SELECT img_url FROM images WHERE image_id = '93029420'";
 $result = DB.findOne($query);
 header('Location: ' $result['img_url'] );
exit();

现在我认为这种方法更好的唯一原因是因为它减少了服务器上下载图像的处理时间。这是正确的还是不正确的,是否有更好的方法?

1 个答案:

答案 0 :(得分:1)

CDN的重点是允许并行下载;还有一些CDN可以从地理上最近的位置下载资产。您的方法使CDN无用,因为用户总是从您的服务器下载图像,因此您只是将其用作远程文件存储。

在您当前的方法中,用户必须等待服务器下载映像,然后从服务器下载。通常,与直接从远程服务器下载的用户相比,它会更慢(假设您的服务器与远程服务器和用户的连接速度都不快)

如果您希望从服务器下载文件,至少可以对其进行缓存,因此每次都不会下载。