php - 与 Postgres 一起工作的图像/媒体服务器

标签 php postgresql image-processing nginx media

我最近有一个 nginx + php-fpm 服务器,可以像这样提供图像:

header('Content-Type: image/png');
echo file_get_contents('example_image.png');
exit();

我逐渐意识到,无论图像是否被缓存,都会对服务器造成巨大的性能影响。 CPU 利用率非常高,100%,连接数量最少。因此,我开始将图像卸载到 CDN,性能立即得到提升,但在某些情况下,我仍然需要通过服务器提供图像,这让我想到了图像/媒体服务器。

我的问题是,我应该使用特定类型的服务器吗?一个可以与数据库通信以找到图像位置并提供服务的?文件系统类型?还是我最好继续启动另一个 nginx + php-fpm 实例并创建一个类似 cdn 的结构实现,其中:

media.example.com 

仅指向该服务器,因此对网络服务器没有性能影响?

最佳答案

您的问题是您将图像视为字符串而不是流。绝对没有必要使用 file_get_contents() 在 php 中加载所有内容并继续 echo 困惑。查找诸如 readfile() 和 PG 相关的 LOB 功能之类的东西:

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;

http://php.net/manual/en/function.readfile.php

$db = new PDO('pgsql:dbname=test host=localhost', $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$stmt = $db->prepare("select oid from BLOBS where ident = ?");
$stmt->execute(array($some_id));
$stmt->bindColumn('oid', $oid, PDO::PARAM_STR);
$stmt->fetch(PDO::FETCH_BOUND);
$stream = $db->pgsqlLOBOpen($oid, 'r');
header("Content-type: application/octet-stream");
fpassthru($stream);

http://php.net/manual/en/pdo.pgsqllobopen.php

按照类似的思路,查看与缓存控制相关的 header 。无需重新发送已在浏览器缓存中的图像。尽可能发送 304 Not Modified:

Make PHP page return "304 Not Modified" if it hasn't been modified

关于php - 与 Postgres 一起工作的图像/媒体服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442874/

相关文章:

javascript - 通过AJAX动态展示大量html

javascript - 动态 php-ajax 表单

performance - pgadmin4 打开数据库的空表非常慢

sql - 支持大数的自然排序

postgresql - 手动插入 Heroku PostgreSQL

matlab - "Cut out"基于边缘检测的图像

php - 从外部文件加载 DIV 标签

php - 如何创建表并在其中插入数据,但如果已有同名表,则只需插入数据并且不再创建表

ios - 在 iOS 上构建全景照片的开源库?

python - 使用直方图的图像python opencv中的颜色百分比