FAQ
Buenas tardes gente de la lista. Estoy intentando grabar y recuperar una
imagen grabada en una base de datos mysql.
Todo bien para guardar en un registro.. pero a la hora de recuperar... no
funciona.
Ya tengo los ojos cruzados...
Tengo que instalar la libreria GD?
Igualmente les envio el codigo. (la conexion con la BD funciona, es el
include de x ahi)

Muchas Gracias

Base de datos:
mysql> describe imagenes;
id int(10) unsigned | | PRI | NULL | auto_increment |
bina | longblob | | |

id_cliente | bigint(20) unsigned | | | 0

fecha | datetime | | | 0000-00-00 00:00:00
formato | varchar(45) | | |
+------------+---------------------+------+-----+---------------------+----------------+
5 rows in set (0.00 sec)
########################################################################################
Formulario de entrada:

<html>
<head>
<title>Imagen a Blob</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form name="frmimage" id="frmimage" method="post"
enctype="multipart/form-data" action="carga.php">
Imagen: <input type="file" id="foto" name="foto" /><br />
<input type="submit" name="enviar" id="enviar" value="Guardar" />
</form>
</body>
</html>
########################################################################################
este es el script para poder subir una imagen.
<?
include("conexion.php");
$archivo = $_FILES["foto"]["tmp_name"];
$tamanio = $_FILES["foto"]["size"];
$tipo = $_FILES["foto"]["type"];
$nombre = $_FILES["foto"]["name"];
echo "Archivo temporal:".$archivo."<br>";
echo "Archivo tamaño:".$tamanio."<br>";
echo "Archivo tipo:".$tipo."<br>";
echo "Archivo nombre:".$nombre."<br>";
$abrirarchivo = fopen($archivo, "rb");
$archivocontenido = fread($abrirarchivo, $tamanio);
$archivocontenido = addslashes($archivocontenido);
fclose($abrirarchivo);
$fecha_carga=date("Y-m-d H:i:s");
mysql_query("insert into imagenes (bina, id_cliente,fecha,formato)
VALUES ('$archivocontenido',1,
'$fecha_carga','$tipo')");
echo mysql_affected_rows();
?>
########################################################################################
Si ejecuto un select desde el MYSQL QUERY BROWSER, muestra que tiene 1
registro.
Estoy probando con solo una imagen.

El script para recuperar es:

<?
include("conexion.php");
$resultado=mysql_query("select * from imagenes where (id_cliente=1)");
$registro = mysql_fetch_array($resultado);
$mime=$registro[4];
$imagen=$registro[1];
header("Content-type: $mime");
echo $imagen;
?>
########################################################################################
Pero en el navegador me aparece:

No se puede mostrar la imagen "http://127.0.0.1/recupera.php" porque
contiene errores.

En que me estoy equivocando?

Search Discussions

  • Rolan Benavent at Mar 7, 2008 at 6:50 pm
    Hola Claudio,
    el motivo, si no me equivoco, es que cuando guardas la imagen en la
    base de datos, realmente no estas guardando la imagen, sino una serie de
    caracteres de texto (esto no es como el acces u otros motores de bb.dd.
    que te guardan el "objeto"). Para mostrarla, prueba con lo siguiente:

    tu tienes puesto:
    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where
    (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=$registro[1];
    header("Content-type: $mime");
    echo $imagen;
    ?>

    pero has de poner:

    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=imagecreatefromstring($registro[1]);
    header("Content-type: $mime");
    //para el tipo de imagen usa esto o algo parecido
    $tipoimg=explode("/",strtolower($mime));
    $tipoimg=$tipoimg[count($tipoimg)-1];
    if($tipoimg=="pjpeg"){$tipoimg="jpeg";}
    $tipoimg="image".$tipoimg;
    call_user_func($tipoimg,$imagen);
    ?>

    y con esto, si no he hecho ningún error, ya te funcionaría.
    También comentarte que no es demasiado recomendable guardar imágenes en
    la base de datos, siempre es mejor subirla con la rutina mediante ftp y
    despues guardar en la base de datos su link... Pero si no tienes más
    remedio que subirla a la base de datos, es bastante recomendable que la
    guardes comprimida (vease bzcompress/bzdecompress,
    gzcompress/gzuncompress, etc). De ese modo ahorrarás bastante espacio en
    la base de datos.

    Un saludo,

    Rolan.




    Claudio Prados escribió:
    Buenas tardes gente de la lista. Estoy intentando grabar y recuperar una
    imagen grabada en una base de datos mysql.
    Todo bien para guardar en un registro.. pero a la hora de recuperar... no
    funciona.
    Ya tengo los ojos cruzados...
    Tengo que instalar la libreria GD?
    Igualmente les envio el codigo. (la conexion con la BD funciona, es el
    include de x ahi)

    Muchas Gracias

    Base de datos:
    mysql> describe imagenes;
    id int(10) unsigned | | PRI | NULL | auto_increment |
    bina | longblob | | |

    id_cliente | bigint(20) unsigned | | | 0

    fecha | datetime | | | 0000-00-00 00:00:00
    formato | varchar(45) | | |
    +------------+---------------------+------+-----+---------------------+----------------+
    5 rows in set (0.00 sec)
    ########################################################################################
    Formulario de entrada:

    <html>
    <head>
    <title>Imagen a Blob</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <form name="frmimage" id="frmimage" method="post"
    enctype="multipart/form-data" action="carga.php">
    Imagen: <input type="file" id="foto" name="foto" /><br />
    <input type="submit" name="enviar" id="enviar" value="Guardar" />
    </form>
    </body>
    </html>
    ########################################################################################
    este es el script para poder subir una imagen.
    <?
    include("conexion.php");
    $archivo = $_FILES["foto"]["tmp_name"];
    $tamanio = $_FILES["foto"]["size"];
    $tipo = $_FILES["foto"]["type"];
    $nombre = $_FILES["foto"]["name"];
    echo "Archivo temporal:".$archivo."<br>";
    echo "Archivo tamaño:".$tamanio."<br>";
    echo "Archivo tipo:".$tipo."<br>";
    echo "Archivo nombre:".$nombre."<br>";
    $abrirarchivo = fopen($archivo, "rb");
    $archivocontenido = fread($abrirarchivo, $tamanio);
    $archivocontenido = addslashes($archivocontenido);
    fclose($abrirarchivo);
    $fecha_carga=date("Y-m-d H:i:s");
    mysql_query("insert into imagenes (bina, id_cliente,fecha,formato)
    VALUES ('$archivocontenido',1,
    '$fecha_carga','$tipo')");
    echo mysql_affected_rows();
    ?>
    ########################################################################################
    Si ejecuto un select desde el MYSQL QUERY BROWSER, muestra que tiene 1
    registro.
    Estoy probando con solo una imagen.

    El script para recuperar es:

    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=$registro[1];
    header("Content-type: $mime");
    echo $imagen;
    ?>
    ########################################################################################
    Pero en el navegador me aparece:

    No se puede mostrar la imagen "http://127.0.0.1/recupera.php" porque
    contiene errores.

    En que me estoy equivocando?

    --
    Rolan Benavent
    Dulasoft, s.l.
    info@dulasoft.com
    *PCMark3t.com*, tu tienda de informática en internet
    <http://www.pcmark3t.com>
    *Dulasoft.com*: consultoría informática, diseño gráfico, programación de
    páginas web y aplicaciones de software, montaje de redes, formación a
    empresas y particulares... <http://www.dulasoft.com>
  • Maikel Ortega Hernández at Mar 8, 2008 at 4:49 am

    Rolan Benavent escribió:
    Hola Claudio,
    el motivo, si no me equivoco, es que cuando guardas la imagen en
    la base de datos, realmente no estas guardando la imagen, sino una
    serie de caracteres de texto (esto no es como el acces u otros motores
    de bb.dd. que te guardan el "objeto"). Para mostrarla, prueba con lo
    siguiente:

    tu tienes puesto:
    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where
    (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=$registro[1];
    header("Content-type: $mime");
    echo $imagen;
    ?>

    pero has de poner:

    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where
    (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=imagecreatefromstring($registro[1]);
    header("Content-type: $mime");
    //para el tipo de imagen usa esto o algo parecido
    $tipoimg=explode("/",strtolower($mime));
    $tipoimg=$tipoimg[count($tipoimg)-1];
    if($tipoimg=="pjpeg"){$tipoimg="jpeg";}
    $tipoimg="image".$tipoimg;
    call_user_func($tipoimg,$imagen);
    ?>

    y con esto, si no he hecho ningún error, ya te funcionaría.
    También comentarte que no es demasiado recomendable guardar imágenes
    en la base de datos, siempre es mejor subirla con la rutina mediante
    ftp y despues guardar en la base de datos su link... Pero si no tienes
    más remedio que subirla a la base de datos, es bastante recomendable
    que la guardes comprimida (vease bzcompress/bzdecompress,
    gzcompress/gzuncompress, etc). De ese modo ahorrarás bastante espacio
    en la base de datos.

    Un saludo,

    Rolan.




    Claudio Prados escribió:
    Buenas tardes gente de la lista. Estoy intentando grabar y recuperar una
    imagen grabada en una base de datos mysql.
    Todo bien para guardar en un registro.. pero a la hora de
    recuperar... no
    funciona.
    Ya tengo los ojos cruzados...
    Tengo que instalar la libreria GD?
    Igualmente les envio el codigo. (la conexion con la BD funciona, es el
    include de x ahi)

    Muchas Gracias

    Base de datos:
    mysql> describe imagenes;
    id int(10) unsigned | | PRI | NULL |
    auto_increment |
    bina | longblob | | |

    id_cliente | bigint(20) unsigned | | | 0

    fecha | datetime | | | 0000-00-00 00:00:00
    formato | varchar(45) | | |
    +------------+---------------------+------+-----+---------------------+----------------+

    5 rows in set (0.00 sec)
    ########################################################################################

    Formulario de entrada:

    <html>
    <head>
    <title>Imagen a Blob</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=utf-8" />
    </head>
    <body>
    <form name="frmimage" id="frmimage" method="post"
    enctype="multipart/form-data" action="carga.php">
    Imagen: <input type="file" id="foto" name="foto"
    /><br />
    <input type="submit" name="enviar" id="enviar" value="Guardar" />
    </form>
    </body>
    </html>
    ########################################################################################

    este es el script para poder subir una imagen.
    <?
    include("conexion.php");
    $archivo = $_FILES["foto"]["tmp_name"];
    $tamanio = $_FILES["foto"]["size"];
    $tipo = $_FILES["foto"]["type"];
    $nombre = $_FILES["foto"]["name"];
    echo "Archivo temporal:".$archivo."<br>";
    echo "Archivo tamaño:".$tamanio."<br>";
    echo "Archivo tipo:".$tipo."<br>";
    echo "Archivo nombre:".$nombre."<br>";
    $abrirarchivo = fopen($archivo, "rb");
    $archivocontenido = fread($abrirarchivo, $tamanio);
    $archivocontenido = addslashes($archivocontenido);
    fclose($abrirarchivo);
    $fecha_carga=date("Y-m-d H:i:s");
    mysql_query("insert into imagenes (bina, id_cliente,fecha,formato)
    VALUES ('$archivocontenido',1,
    '$fecha_carga','$tipo')");
    echo mysql_affected_rows();
    ?>
    ########################################################################################

    Si ejecuto un select desde el MYSQL QUERY BROWSER, muestra que tiene 1
    registro.
    Estoy probando con solo una imagen.

    El script para recuperar es:

    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where
    (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=$registro[1];
    header("Content-type: $mime");
    echo $imagen;
    ?>
    ########################################################################################

    Pero en el navegador me aparece:

    No se puede mostrar la imagen "http://127.0.0.1/recupera.php" porque
    contiene errores.

    En que me estoy equivocando?
    Para estos tipos de casos en los que manipulo imagenes, lo que siempre
    he hecho y me da un buen resultado es guardar en la BD solo el camino
    hacia donde esta guardada la imagen fisicamente dentro del disco duro y
    crear un "img" cuyo "src" lo saco de la BD donde como les dije
    anteriormente lo tengo guardado, a mi modo de ver creo que funciona mas
    rapido que la interpretacion del binario guardado en la BD, ademas de
    que evita que mi BD adquiera grandes proporciones, al menos asi lo
    trabajo yo

    --
    Saludos

    ####################################
    # Maikel David Ortega Hernández
    # Programador & WebMaster
    # Nodo ISP Cienfuegos
    # jabberID : maikelcfg@rimed.cu
    ####################################



    --
    Este mensaje ha sido analizado por MailScanner
    en busca de virus y otros contenidos peligrosos,
    y se considera que está limpio.
    MailScanner agradece a transtec Computers por su apoyo.
  • Rolan Benavent at Mar 8, 2008 at 9:12 am
    Hola Claudio,
    parece ser que lo que te puse no era la solución... Lo único que tienes
    que hacer es esto al recuperar la imagen para mostrarla:

    $imagen=stripslashes($registro[1]);
    header("Content-type: $mime");
    echo $imagen;

    Como puedes ver, era un fallo tonto... Al meterla en la BB.DD. le
    ponias el addslashes, pero al sacarla no se los quitabas.

    Saludos,

    Rolan.


    Maikel Ortega Hernández escribió:
    Rolan Benavent escribió:
    Hola Claudio,
    el motivo, si no me equivoco, es que cuando guardas la imagen en
    la base de datos, realmente no estas guardando la imagen, sino una
    serie de caracteres de texto (esto no es como el acces u otros motores
    de bb.dd. que te guardan el "objeto"). Para mostrarla, prueba con lo
    siguiente:

    tu tienes puesto:
    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where
    (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=$registro[1];
    header("Content-type: $mime");
    echo $imagen;
    ?>

    pero has de poner:

    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where
    (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=imagecreatefromstring($registro[1]);
    header("Content-type: $mime");
    //para el tipo de imagen usa esto o algo parecido
    $tipoimg=explode("/",strtolower($mime));
    $tipoimg=$tipoimg[count($tipoimg)-1];
    if($tipoimg=="pjpeg"){$tipoimg="jpeg";}
    $tipoimg="image".$tipoimg;
    call_user_func($tipoimg,$imagen);
    ?>

    y con esto, si no he hecho ningún error, ya te funcionaría.
    También comentarte que no es demasiado recomendable guardar imágenes
    en la base de datos, siempre es mejor subirla con la rutina mediante
    ftp y despues guardar en la base de datos su link... Pero si no tienes
    más remedio que subirla a la base de datos, es bastante recomendable
    que la guardes comprimida (vease bzcompress/bzdecompress,
    gzcompress/gzuncompress, etc). De ese modo ahorrarás bastante espacio
    en la base de datos.

    Un saludo,

    Rolan.




    Claudio Prados escribió:
    Buenas tardes gente de la lista. Estoy intentando grabar y recuperar una
    imagen grabada en una base de datos mysql.
    Todo bien para guardar en un registro.. pero a la hora de
    recuperar... no
    funciona.
    Ya tengo los ojos cruzados...
    Tengo que instalar la libreria GD?
    Igualmente les envio el codigo. (la conexion con la BD funciona, es el
    include de x ahi)

    Muchas Gracias

    Base de datos:
    mysql> describe imagenes;
    id int(10) unsigned | | PRI | NULL |
    auto_increment |
    bina | longblob | | |

    id_cliente | bigint(20) unsigned | | | 0

    fecha | datetime | | | 0000-00-00 00:00:00
    formato | varchar(45) | | |
    +------------+---------------------+------+-----+---------------------+----------------+

    5 rows in set (0.00 sec)
    ########################################################################################

    Formulario de entrada:

    <html>
    <head>
    <title>Imagen a Blob</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=utf-8" />
    </head>
    <body>
    <form name="frmimage" id="frmimage" method="post"
    enctype="multipart/form-data" action="carga.php">
    Imagen: <input type="file" id="foto" name="foto"
    /><br />
    <input type="submit" name="enviar" id="enviar" value="Guardar" />
    </form>
    </body>
    </html>
    ########################################################################################

    este es el script para poder subir una imagen.
    <?
    include("conexion.php");
    $archivo = $_FILES["foto"]["tmp_name"];
    $tamanio = $_FILES["foto"]["size"];
    $tipo = $_FILES["foto"]["type"];
    $nombre = $_FILES["foto"]["name"];
    echo "Archivo temporal:".$archivo."<br>";
    echo "Archivo tamaño:".$tamanio."<br>";
    echo "Archivo tipo:".$tipo."<br>";
    echo "Archivo nombre:".$nombre."<br>";
    $abrirarchivo = fopen($archivo, "rb");
    $archivocontenido = fread($abrirarchivo, $tamanio);
    $archivocontenido = addslashes($archivocontenido);
    fclose($abrirarchivo);
    $fecha_carga=date("Y-m-d H:i:s");
    mysql_query("insert into imagenes (bina, id_cliente,fecha,formato)
    VALUES ('$archivocontenido',1,
    '$fecha_carga','$tipo')");
    echo mysql_affected_rows();
    ?>
    ########################################################################################

    Si ejecuto un select desde el MYSQL QUERY BROWSER, muestra que tiene 1
    registro.
    Estoy probando con solo una imagen.

    El script para recuperar es:

    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where
    (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=$registro[1];
    header("Content-type: $mime");
    echo $imagen;
    ?>
    ########################################################################################

    Pero en el navegador me aparece:

    No se puede mostrar la imagen "http://127.0.0.1/recupera.php" porque
    contiene errores.

    En que me estoy equivocando?
    Para estos tipos de casos en los que manipulo imagenes, lo que siempre
    he hecho y me da un buen resultado es guardar en la BD solo el camino
    hacia donde esta guardada la imagen fisicamente dentro del disco duro y
    crear un "img" cuyo "src" lo saco de la BD donde como les dije
    anteriormente lo tengo guardado, a mi modo de ver creo que funciona mas
    rapido que la interpretacion del binario guardado en la BD, ademas de
    que evita que mi BD adquiera grandes proporciones, al menos asi lo
    trabajo yo

    --
    Rolan Benavent
    Dulasoft, s.l.
    info@dulasoft.com
    *PCMark3t.com*, tu tienda de informática en internet
    <http://www.pcmark3t.com>
    *Dulasoft.com*: consultoría informática, diseño gráfico, programación de
    páginas web y aplicaciones de software, montaje de redes, formación a
    empresas y particulares... <http://www.dulasoft.com>
  • Javier Martínez Fernández at Mar 7, 2008 at 8:06 pm
    ok, pues el codigo tampoco es que lo vea mal.
    Si eso, prueba a poner mas cabeceras. En mi caso, yo pongo estas

    header('Content-type: image/jpeg; charset=utf-8);
    header('Content-Disposition: inline; filename="test.jpg');

    Cambia lo correspondiente, si no es una imagen jpg


    El 07/03/2008, a las 19:35, Claudio Prados escribió:
    Utilize la gui de mysql y muestra la imagen

    2008/3/7, Javier Martínez Fernández <ecentinela@gmail.com>:
    Si te pones la GUI de mysql, podrás ver con el query browser, si la
    imagen se ha guardado correctamente.
    Lo digo por descartar el guardado completamente.


    El 07/03/2008, a las 19:11, Claudio Prados escribió:

    Buenas tardes gente de la lista. Estoy intentando grabar y recuperar
    una
    imagen grabada en una base de datos mysql.
    Todo bien para guardar en un registro.. pero a la hora de
    recuperar... no
    funciona.
    Ya tengo los ojos cruzados...
    Tengo que instalar la libreria GD?
    Igualmente les envio el codigo. (la conexion con la BD funciona, es el
    include de x ahi)

    Muchas Gracias

    Base de datos:
    mysql> describe imagenes;
    id int(10) unsigned | | PRI | NULL |
    auto_increment |
    bina | longblob | | |

    id_cliente | bigint(20) unsigned | | | 0
    fecha | datetime | | | 0000-00-00
    00:00:00
    formato | varchar(45) | | |
    +------------+---------------------+------+-----
    +---------------------+----------------+
    5 rows in set (0.00 sec)
    ########################################################################################
    Formulario de entrada:

    <html>
    <head>
    <title>Imagen a Blob</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=utf-8" />
    </head>
    <body>
    <form name="frmimage" id="frmimage" method="post"
    enctype="multipart/form-data" action="carga.php">
    Imagen: <input type="file" id="foto" name="foto" /
    <br />
    <input type="submit" name="enviar" id="enviar" value="Guardar" />
    </form>
    </body>
    </html>
    ########################################################################################
    este es el script para poder subir una imagen.
    <?
    include("conexion.php");
    $archivo = $_FILES["foto"]["tmp_name"];
    $tamanio = $_FILES["foto"]["size"];
    $tipo = $_FILES["foto"]["type"];
    $nombre = $_FILES["foto"]["name"];
    echo "Archivo temporal:".$archivo."<br>";
    echo "Archivo tamaño:".$tamanio."<br>";
    echo "Archivo tipo:".$tipo."<br>";
    echo "Archivo nombre:".$nombre."<br>";
    $abrirarchivo = fopen($archivo, "rb");
    $archivocontenido = fread($abrirarchivo, $tamanio);
    $archivocontenido = addslashes($archivocontenido);
    fclose($abrirarchivo);
    $fecha_carga=date("Y-m-d H:i:s");
    mysql_query("insert into imagenes (bina,
    id_cliente,fecha,formato)
    VALUES ('$archivocontenido',1,
    '$fecha_carga','$tipo')");
    echo mysql_affected_rows();
    ?>
    ########################################################################################
    Si ejecuto un select desde el MYSQL QUERY BROWSER, muestra que tiene 1
    registro.
    Estoy probando con solo una imagen.

    El script para recuperar es:

    <?
    include("conexion.php");
    $resultado=mysql_query("select * from imagenes where
    (id_cliente=1)");
    $registro = mysql_fetch_array($resultado);
    $mime=$registro[4];
    $imagen=$registro[1];
    header("Content-type: $mime");
    echo $imagen;
    ?>
    ########################################################################################
    Pero en el navegador me aparece:

    No se puede mostrar la imagen "http://127.0.0.1/recupera.php" porque
    contiene errores.

    En que me estoy equivocando?

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedMar 7, '08 at 6:11p
activeMar 8, '08 at 9:12a
posts5
users4
websitephp.net

People

Translate

site design / logo © 2022 Grokbase