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

标签 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(); 

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

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

最佳答案

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

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

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

关于PHP 这是一种更好的方式来提供其 URL 存储在数据库中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19727766/

相关文章:

php - 类别和子类别的递归函数

php - 如何使用 MySQL 获取最新日期

c# - 从数组中检索正确的 PictureBox 图像

java - Elasticsearch查询不会间歇性地获取结果

mysql - 按 DATE(TIMESTAMP) 分组的 SQL 性能与 DATE 和 TIME 的单独列

php - 如何从symfony2中的表单对象获取每个字段的错误消息?

php - Woocommerce 复合产品在一条线上?

image - 在 CSS 中使用 8 个单独的边框图像而不是 border-image

java - 为什么我的图片不显示? ( java )

java - 检测java web应用程序中cpu使用率15%的原因