繁体   English   中英

使用php从postgresql中显示图像(bytea)

[英]DIsplay image(bytea) from postgresql with php

我有一个postgres数据库,存储图像'bytea'类型,我尝试用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帮助的下一个可怜的人。 请修改注意您使用的是LOB而不是BYTEA。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM