【问题标题】:PHP Which is a better way to serve an image whose URL is stored in a databasePHP 哪个是提供 URL 存储在数据库中的图像的更好方法
【发布时间】:2013-11-12 17:06:54
【问题描述】:

在 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(); 

存储在数据库中的图像 url 是一个 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();

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

【问题讨论】:

  • 出于安全原因和应用程序设计原因。
  • 重定向效率也最好使用HTTP/1.1 301 Moved Permanently状态,以便客户端可以缓存位置。在安全方面:S?你想保护什么?图片的路径?

标签: php image performance amazon-s3


【解决方案1】:

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

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

如果你想从你的服务器下载文件,至少你可以缓存它,所以不是每次都下载。

【讨论】:

    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2013-05-22
    • 2023-03-25
    • 2011-04-02
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多