gpt4 book ai didi

php - 使用 php 显示来自 postgresql 的图像(bytea)

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:50 33 4
gpt4 key购买 nike

我有一个存储图像“bytea”类型的 postgres 数据库,我尝试使用 PHP 将它们显示到浏览器中。我找到了显示其中一个的方法,但我不能显示多个。我使用的代码如下:

文件名 - display_image.php

$conn = pg_connect("dbname=test user=postgres password=postgres");

$temp = '/home/postgres/tmp.jpg';

$query = "select lo_export(image, '$temp') from map ";
$result = pg_query($query);

if($result)
{
while ($line = pg_fetch_array($result))
{
$ctobj = $line["image"];
echo "<IMG SRC=show.php> </br>";

}

}
else { echo "File does not exists."; }
pg_close($conn);

文件名 - show.php

header("Content-type: image/jpeg");
$jpeg = fopen("/home/postgres/tmp.jpg","r");
$image = fread($jpeg,filesize("/home/postgres/tmp.jpg"));
echo $image;

问题似乎是“tmp.jpg”虚拟文件只显示一张图像。如果查询的结果是 7 张图像,那么它会在 while 循环中显示 7 次相同的图像。我该如何解决这个问题?感谢您的关注!

最佳答案

我前段时间为 bytea 做了这个。

你需要通过pg_unescape_bytea运行你的bytea数据。参见 http://php.net/manual/en/function.pg-unescape-bytea.php

基本上,您的 SQL 查询会以转义格式返回 bytea 字段。

但这不是你在做什么。因此,以上内容仅适用于下一个来这里寻求 bytea 帮助的可怜的 sap。请修改以注意您使用的是 LOB 而不是 BYTEA。

另请注意,您的代码不是并发安全的。如果两个用户请求不同的图像,我猜你会让两个用户得到不同的图像。因此,您应该将 oid 添加到检索 url,并将文件命名为/tmp/$oid.jpg 其中 $oid 是大对象的 oid。您将需要检索该信息(我相信它看起来像是存储在 map 的图像字段中?)。另一方面,假设所有文件本质上都是公开的。如果不是这种情况,您需要将所有内容移至 show_image.php 并在完成后清理。

关于php - 使用 php 显示来自 postgresql 的图像(bytea),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11273795/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com