extraer imagen bytea con php y postgres

701 views
Skip to first unread message

Ar0cs3

unread,
Nov 12, 2012, 6:29:42 PM11/12/12
to php-m...@googlegroups.com, php---pro...@googlegroups.com
Saludos a todos,
me surge el siguiente problema  a raiz de que actulize php  no me permite mostrar la informacion de un campo byte de postgre s.

anterior mente lo podia mostrar sin problemas pero  ahora  solo me da  1-1 


he estado debugeando pero no logro hacer que me  despliege  la informacion del objeto.



este es el codigo que utilizo:

<?php

require ("funciones.php");

# El parametro f=1 indica que se va a forzar a bajar el archivo
        $f=isset($_REQUEST['f'])?$_REQUEST['f']:0;
        # Recupera el id pasado como parametro
        $id=isset($_REQUEST['id'])?$_REQUEST['id']:0;
        # Conexisn a la base de datos
        $link = pg_connect("host= user=s password==componentes_bd") or die(pg_last_error($link));

        # Recupera el archivo en base al ID
        $sql = "select id, nombre, descripcion, mime, size, coalesce(archivo_oid,-1) as archivo_oid,
        coalesce(archivo_bytea,'-1') as archivo_bytea from foo where id=$id";
 // echo " $sql";

//Aqui me muestra el query correctamente  
  //  die();

$result=pg_query($link, $sql);
# Si no existe, redirecciona a la pagina principal
        if(!$result || pg_num_rows($result)<1){
                header("Location: index.php");
                exit();
        }
        # Recupera los atributos del archivo
        $row=pg_fetch_array($result,0);
          //echo " $result";
          //die();

pg_free_result($result);
        # Para determinar si archivo a bajar fue ingresado al campo archivo_oid (es de tipo "oid")
        $isoid=false;
        if($row['archivo_bytea']==-1) $isoid=true;
        if($row['archivo_oid']==-1) $isoid=true;
        if($row['archivo_bytea']==-1 && $row['archivo_oid']==-1) die('No existe el archivo para mostrar o bajar');
        if($isoid){
                # Inicia la transaccisn
                pg_query($link, "begin");
                # Abre el objeto blob
                $file=pg_lo_open($link, $row['archivo_oid'], "r");
        }
        else{
                # Hace el proceso inverso a pg_escape_bytea, para que el archivo esti en su estado original

$file=($row['archivo_bytea']);
                     
                   echo pg_unescape_bytea($file);     
}
# Envmo de cabeceras
#
        
// echo " $file";
//     die();

//hecambiado varias veces el header pero no me muestra la informacion
//echo "$isoid";       
header("Cache-control: private");
        header("Content-type: $row[mime]");
//echo pg_unescape_bytea($raw);
if($f==1)
        header("Content-Disposition: attachment; filename=\"$row[nombre]\"");
        header("Content-length: $row[size]");
        header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
        header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
        header("Cache-Control: no-cache, must-revalidate");
        header("Pragma: no-cache");
//echo pg_unescape_bytea($raw);
if($isoid){
                # Imprime el contenido del objeto blob
                pg_lo_read_all($file);
                # Cierra el objeto
                pg_lo_close($file);
                # Compromete la transaccisn
                pg_query($link, "commit");
        }
        else{
                # Imprime el contenido del archivo
                print $file;
        }
        pg_close($link);       
?>


agradeceria mucho  su apoyo .






(٩(●̮̮̃•̃)۶  El éxito es simple. Hacer lo correcto, de la manera correcta, en el momento correcto.... α®øç§є  ..

        \|!!!!!!!|/
       ( 0 _O )
-oOOo-(~)-oOOo-  


Reply all
Reply to author
Forward
0 new messages