( Marcin )
Przegl±danie na szczê¶cie nie jest zbyt skomplikowane, najtrudniejsze jest
niestety wstawianie i kasowanie.
Zw³aszcza usuwanie wierszy odwo³uj±cych siê do bazy nie jest trywialne
(nale¿y stworzyæ triggera) ale o tym w przysz³o¶ci.
A teraz przejd¥my do tematu.
W pliku gdzie ma siê pojawiæ obrazek z bazy umieszczam:
# 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 ' ';
?>
W pliku m_obrazek.php3 umieszczam tylko to:
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)
|