Version: 1
Type: Class
Category: Databases
License: GNU General Public License
Description: A class to save and restore files in postgresql database. in the end of the class there is an exemple.
<?php function addImage($conn,$filename) { // Open and read the file that was uploaded $fp = fopen($filename, "r"); if($fp == false) echo "Error opening file"; // Begin a PostgreSQL transaction pg_exec("begin"); // create the large object and get the lo id $lo_id = pg_locreate(); // have postgresql open the large object for writing $lo_fp = pg_loopen($lo_id, "w"); // for ever 8192 bytes of the uploaded file while($nbytes = fread($fp, 8192)) { // write to the large object $tmp = pg_lowrite($lo_fp, $nbytes); // handle possible error if($tmp < $nbytes) { echo "error while writing large object"; } } // close the large object pg_loclose($lo_fp); // commit the postgresql transaction pg_exec("commit"); // close the uploaded file fclose($fp); if (!is_int($lo_id)) { // return false return false; } if (is_int($lo_id)) { // return large object id return $lo_id; } } function ReadImage($lo_id,$filesize) { pg_exec("begin"); $handle = pg_lo_open($lo_id,"r"); $data = pg_lo_read($handle,$filesize); //pg_lo_close($lo_fp); //pg_exec($conn,"commit"); return $data; } function WriteImageToFile($id,$filename,$filesize) { $data = ReadImage($id,$filesize); $f = fopen($filename,"w"); if(fwrite($f,$data) == FALSE) { $message ="ERROR";//getTokenValue("CANT_WRITE_FILE",$lang)." dbresource.txt"; } fclose($f); } ?> -------- Database ---------------- CREATE TABLE images ( name text, image oid, filesize bigint ); ---------- File to Database Exemple ------------ include("image.php"); $filetosave="HPIM0551.JPG" // file to save in the database $loId = addImage($conn,$filetosave); $id_Desc = $filetosave; $fsize=filesize("HPIM0551.JPG"); $sql = "INSERT INTO images(name,value,filesize) VALUES('$id_Desc','$loId','$fsize')"; pg_query($sql); -------- Database to Files Exemple ------------ include("image.php"); $sql = "Select value,name,filesize FROM images"; $res = Query($conn,$sql); $dir = "C:images"; // directory while(Fetch($res)) { if (Cell($res,2)) { WriteImageToFile(Cell($res,0),$dir.Cell($res,1),Cell($res,2)); } }