Przeglądanie obrazków z bazy PostgreSql.Przeglądanie obrazków z bazy PostgreSql. W pliku gdzie ma się pojawić obrazek z bazy umieszczam:
<?php
# nadaję jakiś identyfikator, aby można się było w bazie jakoś odwołać do
obrazka.
$nr=....
# wyświetlam obrazek - odwoluje sie do strony, która go stworzy
(m_obrazek.php3)
echo '<img border=1 src="m_obrazek.php3?nr='.$nr.'" >';
?>
W pliku m_obrazek.php3 umieszczam tylko to: <?php Header("Content_type: image/gif"); header("Expires: Mon, 31 Nov 1997 05:00:00 GMT"); // data w przeszlosci header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // zawsze modyfikowany header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Pragma: no-cache"); // HTTP/1.0
// Podłączenie do bazy $conn = pg_Connect ("","","","","komis"); if (!$conn) { exit; } // select, który wybiera na podst. nr zdjęcie $sel="Select nr_kolejny, zdjecie from m_pojzdj where nr_kolejny=".$nr ; pg_Exec ($conn, "begin"); // początek transakcji $result = pg_Exec ($conn, $sel); // uruchomienie selecta if (!$result) { exit; } $row = pg_fetch_object ($result, 0); // pobranie obiektu $fd=pg_loopen($conn,$row->zdjecie,"r"); // otwarcie OID'a pg_loreadall($fd); //przeczytanie zawartości i przesłanie jako ciągu
bajtów pg_loclose($fd); pg_exec($conn,"commit"); // koniecznie potwierdzenie transakcji pg_exec($conn,"End"); // i end pg_close($conn); ?> W pliku m_obrazek.php3 nie może się pojawić żadne echo ani nic dodatkowego,
gdyż browser ma to traktować jako przesyłany ciąg bajtów.
Nagłówek takiego pliku jest też bardzo ważny, żeby przeglądarka odczytała to
co trzeba z bazy a nie wyświetlała jakieś starocie z cache'a. U mnie to działa - można sprawdzić na www.komisy.plocman.pl. Strona co
prawda nie uruchomiona ale jakieś testowe dane tam są - i to działa na
Postgresie. Marcin (marcin.czarny@orlen.pl) |