簡體   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