Categories
Artí­culos PHP

Guardar una imagen y su miniatura a un campo Blob de mysql

Script de PHP que permite guardar una imagen y su miniatura a un campo Blob de mysql

Leyendo distintos foros de PHP, me encontré con uno en el que ofrecían dinero por hacer un script que subiendo una foto mediante un formulario HTML, se guarde esta en un campo BLOB de mysql, y su miniatura en otro campo BLOB, y que al final del script no deberían quedar ni la foto ni la miniatura en el servidor, solamente en la base de datos mysql.

Pues como que me picó el bicho y me animé a hacerlo, y aquí les publico el script para que lo usen si es que lo necesitan.

¿Qué necesitamos?

Para crear la miniatura necesitamos la Librería Gráfica GD, en este script estamos usando la versión 2.0.28 de esta librería.

Si esta librería está activada, en el phpinfo() debe salir algo como esto:

GD Activado en PHP mostrado en phpinfo()

Si no la tenemos activada solo tenemos que modificar el archivo php.ini que se encuentra en C:\Windows (puede variar según tu versión de Windows), y agregar la línea extension=php_gd2.dll en la sección "Dynamic Extensions". El archivo php_gd2.dll debe estar en la carpeta "extensions" dentro del directorio donde instalaste el php, por ejemplo "C:\php\extensions". Si no tienes el archivo php_gd2.dll, te lo puedes descargar aquí.

Desarrollo del Script

El formulario de upload y el script php está en una sola página, la nombré como blob.php, empezemos entonces:

php:

<?php
// Verificamos que el formulario no ha sido enviado aun
$postback = (isset($_POST["enviar"])) ? true : false;
if($postback){
  // Nivel de errores
  error_reporting(E_ALL);
  // Constantes
  # Altura de el thumbnail en píxeles
  define("ALTURA", 100);
  # Nombre del archivo temporal del thumbnail
  define("NAMETHUMB", "/tmp/thumbtemp"); //Esto en servidores Linux, en Windows podría ser:
// define("NAMETHUMB", "c:/windows/temp/thumbtemp"); y te olvidas de los problemas de permisos
  # Servidor de base de datos
  define("DBHOST", "localhost");
  # nombre de la base de datos
  define("DBNAME", "test");
  # Usuario de base de datos
  define("DBUSER", "root");
  # Password de base de datos
  define("DBPASSWORD", "");
  // Mime types permitidos
  $mimetypes = array("image/jpeg", "image/pjpeg", "image/gif", "image/png");
  // Variables de la foto
  $name = $_FILES["foto"]["name"];
  $type = $_FILES["foto"]["type"];
  $tmp_name = $_FILES["foto"]["tmp_name"];
  $size = $_FILES["foto"]["size"];
  // Verificamos si el archivo es una imagen válida
  if(!in_array($type, $mimetypes))
    die("El archivo que subiste no es una imagen válida");
  // Creando el thumbnail
  switch($type) {
    case $mimetypes[0]:
    case $mimetypes[1]:
      $img = imagecreatefromjpeg($tmp_name);
      break;
    case $mimetypes[2]:
      $img = imagecreatefromgif($tmp_name);
      break;
    case $mimetypes[3]:
      $img = imagecreatefrompng($tmp_name);
      break;
  }
  $datos = getimagesize($tmp_name);
  $ratio = ($datos[1]/ALTURA);
  $ancho = round($datos[0]/$ratio);
  $thumb = imagecreatetruecolor($ancho, ALTURA);
  imagecopyresized($thumb, $img, 0, 0, 0, 0, $ancho, ALTURA, $datos[0], $datos[1]);
  switch($type) {
    case $mimetypes[0]:
    case $mimetypes[1]:
      imagejpeg($thumb, NAMETHUMB);
          break;
    case $mimetypes[2]:
      imagegif($thumb, NAMETHUMB);
      break;
    case $mimetypes[3]:
      imagepng($thumb, NAMETHUMB);
      break;
  }
  // Extrae los contenidos de las fotos
  # contenido de la foto original
  $fp = fopen($tmp_name, "rb");
  $tfoto = fread($fp, filesize($tmp_name));
  $tfoto = addslashes($tfoto);
  fclose($fp);
  # contenido del thumbnail
  $fp = fopen(NAMETHUMB, "rb");
  $tthumb = fread($fp, filesize(NAMETHUMB));
  $tthumb = addslashes($tthumb);
  fclose($fp);
  // Borra archivos temporales si es que existen
  @unlink($tmp_name);
  @unlink(NAMETHUMB);
  // Guardamos todo en la base de datos
  #nombre de la foto
  $nombre = $_POST["nombre"];
  $link = mysql_connect(DBHOST, DBUSER, DBPASSWORD) or die(mysql_error($link));;
  mysql_select_db(DBNAME, $link) or die(mysql_error($link));
  $sql = "INSERT INTO tabla(nombre, foto, thumb, mime)
    VALUES
    ('$nombre', '$tfoto', '$tthumb', '$type')"
;
  mysql_query($sql, $link) or die(mysql_error($link));
  echo "Fotos guardadas";
  exit();
}
?>
html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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="<?php echo $_SERVER['PHP_SELF'];?>">
        Nombre: <input type="text" id="nombre" name="nombre" /><br />
        Imagen: <input type="file" id="foto" name="foto" /><br />
        <input type="submit" name="enviar" id="enviar" value="Guardar" />
</form>
</body>
</html>

Las primeras líneas controlan que el formulario aun no se ha enviado, despues definimos constantes para guardar los archivos en nuestra base de datos, solo las cambiamos según nos convenga.

Despues verificamos si el archivo que subimos es una imagen para esto verificamos su tipo MIME. Los tipos que se permiten en este script son "image/jpeg" , "image/gif" e "image/png". Caso contrario recibiremos el mensaje "El archivo que subimos no es una imagen válida".

Según el tipo MIME de la imagen, crearemos la miniatura con las funciones imagecreatefromjpeg(), imagecreatefromgif() o imagecreatefrompng().

La función imagecopyresized() crea la miniatura de la imagen, aunque también podemos utilizar imagecopyresampled().

Y aquí el script que utilizé para la tabla:

sql:

CREATE TABLE `tabla` (
  `idfoto` int(3) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(255) NOT NULL DEFAULT '',
  `foto` blob NOT NULL,
  `thumb` blob NOT NULL,
  `mime` varchar(40) NOT NULL DEFAULT '',
  PRIMARY KEY  (`idfoto`)
) ;
 

Ustedes ya le agregan los campos que necesiten.

Actualización

Dado que el soporte GIF fue retirado por completo de la biblioteca GD en la versión 1.6, la función imagegif no se encuentra disponible si está usando tal versión de la biblioteca GD. Se espera que el soporte para esta característica regrese en una versión posterior al relanzamiento del soporte GIF en la biblioteca GD a mediados de 2004. Para más información, consulte el sitio web del Proyecto GD.

Para que nuestro script funcione corréctamente la carpeta que lo contiene debe tener permisos de escritura, la mayoría de hostings que ofrecen PHP tienen los archivos bajo la carpeta public_html, no se sugiere correr este script bajo la carpeta raiz, ya que si damos permisos de escritura a public_html otros usuarios pueden acceder y modificar nuestros archivos. La sugerencia es correr el script bajo una carpeta cualquiera diferente de la raiz, por ejemplo /thumbs/blob.php, asi no tendremos problemas de seguridad.

Actualización 2

Agregué al script en el arreglo de mimes el tipo "image/pjpeg" para que no haya problemas al subirlo, también a sugerencia de mi master Alex cambié la ruta de la NAMETHUMB, para que se guarde en la carpeta temporal del SO en el que se ejecuta. Si es windows entonces c:\Windows\Temp\ y si es linux /tmp/, etc.

Enlaces

Autor

Braulio Andrés Soncco Pimentel
Programador - Diseñador
braulio at buayacorp.com

244 replies on “Guardar una imagen y su miniatura a un campo Blob de mysql”

Andrés me parece que lo estan pidiendo que el thumbail de la imagen lo manejes en memoria no en un archivo temporal fijate donde dice "no se puede guardar en una carpeta en el servidor, solo en un campo BLOB". Si me equivoco perdon, pero me parece que no es lo que se pedía

... y que al final del script no deberían quedar ni la foto ni la miniatura en el servidor, solamente en la base de datos mysql.

Al final del Script, no queda ni un archivo en el servidor, solo en la base de datos.

Esta muy bien, pero es que soy nuevo y estoy aprendiendo, y no se como hacer la tabal de la base de datos, osea los parametros de nombre, foto, tumbs, mime. Si alguien puede ayudarme, se lo agradezco.
Saludos.

El Script de la tabla es este. Si tienes más dudas escríbeme braulio @ buayacorp.com

CREATE TABLE `tabla` (
`idfoto` int(3) NOT NULL auto_increment,
`nombre` varchar(255) NOT NULL default '',
`foto` blob NOT NULL,
`thumb` blob NOT NULL,
`mime` varchar(40) NOT NULL default '',
PRIMARY KEY (`idfoto`)
) ;

me da error:

Warning: imagejpeg(): Unable to open 'thumbtemp' for writing in /sitios/m1547/discocompartido.com.ar/public_html/test.php on line 59

Hola soy nuevo en php y mysql y queria saber ya que por lo que veo la tienen bastante clara es si alguno sabe algun buen manual en castellano sobre mysql me salta un error default-character-set=latin1 y ya no se donde buscar la solucion. Mil perdones ya que no tiene que ver con el tema.

primero gracias por el curro, pero lo he probado y no introduce nada en la tabla, y tampoco da ningún error. El script está listo para usar?
gracias

Si, el script está listo para usar, estás seguro que no produce ningún error?, haz creado la tabla según el script?,
revisa bien. Copia el código tal como está. Asegúrate de que la línea error_reporting(E_ALL) está ahi, ten en cuenta también los permisos de la carpeta donde estás corriendo el script.

Saludos

Hola, parece que todo esta bien, pero...cuando inserto una jpeg me da el mensaje de error "la imagen no es valida" y cuando intento insertar un gif me da un error de mysql.alguien me puede aclarar lo que pasa. Gracias

Hola...cuando intento guardar una imagen me envia un error que dice "El archivo que subiste no es una imagen válida"...a que se debe....gracias

tengo una pregunta para usted: como hago para guardar un archivo imagen. tiff en un campo blob (developer 6i) oracle9

y cuando intento insertar un gif me da un error de mysql.alguien me puede aclarar lo que pasa.

Hola...cuando intento guardar una imagen me envia un error que dice "El archivo que subiste no es una imagen válida"...a que se debe....gracias

Este error se debe a que en el arreglo de tipos permitidos no agregué todos los tipos (el pjpeg por ejemplo). Este fin de semana actualizaré el Script para que lo puedan usar.

Saludos

tengo una pregunta para usted: como hago para guardar un archivo imagen. tiff en un campo blob (developer 6i) oracle9

Ya pronto, paciencia 😉

Súper interesante tu script, felicitaciones! AUnque no pude echarlo a funcionar, pero no importa, vale el esfuerzo y si le ha ido bien a otros, incluyéndote,entonces vale. Es mi problema el no saber configurar algo que se me escapa en estos momentos.

Pasando aotro tema, te agradecería mucho que me respondieras a mi eMail por lo siguiente:

Tengo un formulario para subir contenido y necesito que me permita browsear la imagen en mi PC, seleccionarla y luego de haber llenado el resto del formulario con el texto de resumen y el de detalle, que el script sea capaz de subir la foto en un directorio configurado en el mismo script.

Imagino que tú sabes bien a que me refiero y debes tener por ahí algo que me permita hacer esto. Yo he construido el formulario con el Dreamweaver y me funciona sumamente bien, coloca el texto y toda la información en la base de datos MySQL sin problemas, pero necesito lo de la foto, ya que actualmente tengo que valerme de un script externo para hacer esta operación, lo cual es engorroso.

De veras te agradeceré mcho si me ayudas, ya sabes mi correo.

Un fuerte abrazo,

Ricardo

me da error:

Warning: imagejpeg(): Unable to open 'tn_urugy.jpeg' for writing

en serv.windows no tengo problema, pero cuando lo paso el server linux...ahí comienzan los problemas y me aparecen esos lios.

Saludos Robert

Tienes que cambiar los permisos de la carpeta donde quieres guardar las miniaturas. Está explicado en el artículo.

Saludos

Quiero hacer esto con Microsoft SQL, pero no encuentro como definir el tipo de datos BLOB, cual seria el equivanelnte de tu rutina: en MS sql ???

CREATE TABLE `tabla` (
`idfoto` int(3) NOT NULL AUTO_INCREMENT,
`nombre` varchar(255) NOT NULL DEFAULT '',
`foto` blob NOT NULL,
`thumb` blob NOT NULL,
`mime` varchar(40) NOT NULL DEFAULT '',
PRIMARY KEY (`idfoto`)
) ;

El equivalente de "blob" en SQL Server es "image", la tabla quedaría más o menos asi:


CREATE TABLE tabla (
idfoto integer NOT NULL IDENTITY(1,1),
nombre varchar(255) NOT NULL,
foto image NOT NULL,
thumb image NOT NULL,
mime varchar(40) NOT NULL,
PRIMARY KEY (idfoto)
) ;

Saludos

hola braulio:tengo q entregar mi proyecto final de curso y lo estoy haciendo en php ,el problema es q necesito guardar imagenes en la base de datos para despues mostrarlas en una especie de catalogo de productos. cuando inserto un nuevo producto a ese catalogo tengo q insertarle una imagen y ese es mi problema. YA HE MIRADO EL SCRIPT Q HAS DEJADO XO X ALGUNA CAUSA NO FUNCIONA Y LA VERDAD ES Q NO SE Q HACER , ESTOY COMO LOCO BUSCANDO LA SOLUCION AL PROBLEMA PLANTEADO . SI ALGUIEN ME PUEDE AYUDAR LE ESTARE ETERNAMENTE AGRADECIDO.

Warning: imagejpeg(): Unable to open 'thumbtemp' for writing in public_html/admin/modulos/galeria.php on line 90

Warning: fopen(thumbtemp): failed to open stream: No such file or directory in public_html/admin/modulos/galeria.php on line 94

Warning: filesize(): Stat failed for thumbtemp (errno=2 - No such file or directory) in public_html/admin/modulos/galeria.php on line 95

Warning: fread(): supplied argument is not a valid stream resource in public_html/admin/modulos/galeria.php on line 95

Warning: fclose(): supplied argument is not a valid stream resource in public_html/admin/modulos/galeria.php on line 97

ke onda por ke no puede scribir en el archivo y por ke no lo encuentra

me guarda la foto pero no el thumbnail y tira este error

Warning: imagejpeg(): Unable to open 'thumbtemp' for writing in /home/borgocai/public_html/admin/modulos/galeria.php on line 71

Warning: fopen(thumbtemp): failed to open stream: No such file or directory in /home/borgocai/public_html/admin/modulos/galeria.php on line 81

Warning: filesize(): Stat failed for thumbtemp (errno=2 - No such file or directory) in /home/borgocai/public_html/admin/modulos/galeria.php on line 82

Warning: fread(): supplied argument is not a valid stream resource in /home/borgocai/public_html/admin/modulos/galeria.php on line 82

Warning: fclose(): supplied argument is not a valid stream resource in /home/borgocai/public_html/admin/modulos/galeria.php on line 84

Cuando quiero mostrar las imagenes guardadas, me aparece un cuadradito con un X [x] y no me muestra la imagen.
Alguien sabe a que se puede deber este problema? Socorrooooooooooo

Para Rodrigo, ese error es porque no tienes los permisos necesarios, revisa bien los permisos, como dice en el artículo trata de que las fotos se guarden en un directorio diferente a la raiz.

Para Esteban, no puedo ayudarte porque no veo cómo estás mostrando las imágenes exáctamente, te sugiero ver éste artículo.

para guardar el thumbnail hay que crear un a carpeta en el servidor ?
A pesar de todo si se puede subir el archivo....pero los archivos jpg se guardan como pjpeg como cambio eso?
Y despues de eso no puedo ver la imagen solo sale el tipico cuadrito con una X adentro, cuando no puede mostrar la imagen.
Otra cosa a medida q guardo archivos pjpeg en la base de dato mysql aumenta automaticamente los "idfoto" eso lo entiendo, pero si llego a guardar "5" archivos y despues los borro y luego vuelvo a subir archivos el "idfoto" empieza en el numero "6" como puedo hacer para q empieze en el numero "1"?

Sobre tu primera pregunta, ya NO es necesario crear una carpeta en el servidor, lo único que tienes que hacer es cambiar define("NAMETHUMB", "thumbtemp");, por define("NAMETHUMB", "/tmp/thumbtemp");, como verás se añadió "/tmp/", esto representa la carpeta temporal de tu sistema (para Linux /tmp, para windows probablemente c:/windows/temp), así ya no hay problemas con los permisos.
Ahora sobre los pjpeg, es problema del Internet Explorer, pero igual debería funcionar...
Sobre los auto_increment del MySQL, para que se reusen los valores eliminados automáticamente tienes que usar otro tipo de tablas (no MyISAM), podrías asignar manualmente los nuevos ID's pero sería engorroso, así que mejor lo dejas tal como está...

Mi profesor braulio tenía que actualizar eso en su artículo, pero al parecer está demasiado ocupado como para hacerlo, así que me tomé la libertad de contestarte...

Saludos

Hola:
un pequeño problema, ya active la libreria gd, pero la normal la php_gd.dll por que la otra dice que no la encuentra pero si esta en el directorio, ademas cuando quiero ver la imagen se queda con un tache asi cuando no se ven. si me puedes ayudar a hecharlo andar te lo agradecere

Tengo otras dudas..

Digamos que la tabla ahora empieza en 6 y sigue 7,8,9,10 , ahora tengo 5 fotos en la tabla empezando desde "6" ¿asi debe funcionar? no necesita el "idfoto" numero "1" para poder mostrar la foto?

Otra pregunta utilizo dreamweaver y leyendo unos manuales descubri que dreamweaver no extrae datos binarios de tablas (en este caso de MySQL) ¿tendra q ver esto en algo ,como para que no se pueda ver las imagenes o el codigo publicado en este articulo no tiene q ver con eso?

Para probar la pagina antes de subirla al servidor web la estoy ejecutando en un servidor apache. Todos los archivos los ejecuto dentro de la carpeta del servidor apache (la carpeta donde se ejecutan todos los archivos) ¿MySQL debe estar dentro de esta carpeta?

No, el id de la foto cambia cada vez

<img src="verblob.php?idfoto=6&tam=1" alt="Imagen desde Blob" />

En este caso te mostrará la foto que está identificada con el id "6", revisa bien éste artículo.

Dreamweaver simplemente es un editor, no esperes que Dreamweaver te muestre todo lo que haces, los resultados ya los verás en el navegador.

Y mysql puede estar donde tú quieras, o donde lo hayas instalado o en un servidor externo, para que el script funcione simplemente debes seguir los pasos del artículo.

Saludos

Hola

Tengo problemas al guardar las imagenes. Suponiendo que tengo una imagen de 500Width 800Height:

-Cuando le de doy enviar en el formulario, esta
no me guarda la imagen completa en el archivo blob. Muestra la imagen desde el primer pixel de altura, hasta la mitad mas omenos (aprox 400px o 600px) y lo que resta para completar el tamaño de la imagen me la muestra en blanco o transparente.

¿Como puedo solucionar este problema? Ya intente haciendo mas grande el buffer de memoria de el php.ini para la cantidad de memoria que pasa por los POST, incremente el tiempo de espera para la ejecucion de archivos en el mismo archivo.

¿Creen que tenga que buscar en otro lado?
¿Donde podria estar este problema?

Hola, Encontre la respuesta ami post anterior...

Para que no se guardara simplemente 80% de la imagene siendo que exede el tamaño del campo, simplemente cambio el tipo BLOB por LONGBLOB y listo.

Roberto: yo tuve bastante problema con la identificación de la php_gd2.dll, la puse en c:\php\extensions y no me la veia el info.php. Lo solucioné colocando la que tiene de 776Kb de tamaño; que puedes sacarla de los binaries de un php para windows en php.net

Cómo es que no me pasa la foto como argumento POST del script. Lo que digo es q si hago un print_r del $_POST sólo me aparecen enviar y nombre. Que pasa?

tiene el atributo enctype="multipart/form-data"

El codigo es el siguiente:

">
Nombre:
Imagen:

y al hacer un print_r($_POST); me sale:

Array
(
[nombre] => ds
[enviar] => Guardar
)

y no me pone nada de [foto] (print_r imprime un array)

tengo este problema, escribi este script para subir imagenes al servidor y funciona a medias tintas, porq sube el archivo pero sin su extension entonces cuando lo quiero que se "imprima" en la pagina no reconoce nada. Se me ocurrio poner en el script del array que muestra la foto agregarle la extension pero en el formulario doy la posibilidad de subir imagenes gif y jpg y no quiero limitar el form a un solo formato. es muy importante para mi resolver esto y te agradeceria que me des una ayuda con esto. para lo que te pueda servir... ALI (como mohamed). aca va el script
Se ha transferido el archivo $archivo_name";
echo "Su tamaño es: $archivo_size bytes";
echo "El fichero es tipo: $archivo_type ";
}
}else{
echo "No ha podido transferirse el fichero";
echo "su tamaño no puede exceder de $lim_tamano bytes";
}
?>

este es el script del post anterior

Se ha transferido el archivo $archivo_name";
echo "Su tamaño es: $archivo_size bytes";
echo "El fichero es tipo: $archivo_type ";
}
}else{
echo "No ha podido transferirse el fichero";
echo "su tamaño no puede exceder de $lim_tamano bytes";
}
?>

no me publica es script espero q a vos te haya llegado. sino mandame un mail que te lo envio.

mi problema era el siguiente:

Warning: filesize() [function.filesize]: stat failed for c:/windows/temp/thumbtemp in

Warning: fread() [function.fread]: Length parameter must be greater than 0. in

y lo resolvi asumiendo que necesita in valor integer en la expresion filesize

$fp = fopen(NAMETHUMB, "rb");
$tthumb = fread($fp, filesize(NAMETHUMB));

$fp = fopen(NAMETHUMB, "rb");
$tthumb = fread($fp, filesize(NAMETHUMB));

Hola, ya he revisado de pies a cabeza el script y todo se ve bien, mi servidor esta en windows y me arroha la siguiente error

"Parse error: parse error in c:\domains\mismascotas.com.ve\wwwroot\grardarfotomysql.php on line 12"

la linea del scrip esta asi

define("NAMETHUMB", "c:/windows/temp/thumbtemp");

Hola
Tego un problema con NAMETHUMB. he intentado usar los dos metodos, Linux y Windows en :
//define("NAMETHUMB", "/tmp/thumbtemp"); //Esto en servidores Linux, en Windows podría ser:
define("NAMETHUMB", "C:/windows/temp/thumbtemp"); //y te olvidas de los problemas de permisos

y al ir a guardar la foto me aparecen estos mensajes de error:

Warning: imagejpeg(): Unable to open 'c:/windows/temp/thumbtemp' for writing in /home/wwwfotbmak/domains/fotoclubterrassa.com/public_html/testphp/blob.php on line 70

Warning: fopen(): Unable to access c:/windows/temp/thumbtemp in /home/wwwfotbmak/domains/fotoclubterrassa.com/public_html/testphp/blob.php on line 86

Warning: fopen(c:/windows/temp/thumbtemp): failed to open stream: No such file or directory in /home/wwwfotbmak/domains/fotoclubterrassa.com/public_html/testphp/blob.php on line 86

Warning: filesize(): Stat failed for c:/windows/temp/thumbtemp (errno=2 - No such file or directory) in /home/wwwfotbmak/domains/fotoclubterrassa.com/public_html/testphp/blob.php on line 87

Warning: fread(): supplied argument is not a valid stream resource in /home/wwwfotbmak/domains/fotoclubterrassa.com/public_html/testphp/blob.php on line 87

Warning: fclose(): supplied argument is not a valid stream resource in /home/wwwfotbmak/domains/fotoclubterrassa.com/public_html/testphp/blob.php on line 89
Fotos guardadas

la carpeta donde guarde blob.php tiene privilegios de lectura y escritura, pero sigo sin encontrar una solucion.

Gracias

esta muy interesante el codigo pero me da el siguiente error Fatal error: Call to undefined function: imagecreatetruecolor() in ... on line 47, en esa linea está $thumb = imagecreatetruecolor($ancho, ALTURA);
Me podras ayudar??? :S muchisimas gracias

Fany, con este método sólo podrás visualizar una imagen a la vez, para visualizar otra tienes que hacer otra página adicional, sobre tu idea de guardar las imágenes en el cliente no entiendo muy bien, pero la manera más sencilla de hacerlo es subir las imágenes a un directorio de tu servidor y luego utilizar etiquetas img, en la base de datos sólo guardarías los nombres de los archivos...

Saludos

hola. he estado tratando muchisimo de cargar en una pagina todas las imagenes que tengo en la tabla de la BD mysql. pero solo me muestra una sola. el codigo en resumen:
$result = mysql_query ("SELECT idfoto,foto FROM tabla",$link);

while($row=mysql_fetch_array($result))
{
header("Content-type: image/jpeg");
echo $row["foto"];
}

Porque solo me muestra una sola de todas las que tengo...Gracias de antemano

María, como he mencionado en el comentario anterior al tuyo no puedes mostrar varias imágenes usando sólo una página, tienes que usar un mínimo de 2:

* Una que muestre la imagen en base a un código o nombre.
* La otra haciendo la iteración sobre las imágenes que quieres mostrar, haciendo uso de la primera página: <img src="pagina1.php?codigo=$fila[codigo]" />

Saludos

Asi es, es mejor hacerlo con archivos, algún tipo de sistema que te acepte upload de imágenes, y redimension con GD, en vez de uno que guarde en base de datos.

si bueno asi lo he estado haciendo. pero con todo este boom de la database pense que era mas factible.gracias!!!!!! muy amable

necesito de su ayuda, estoy haciendo una pagina web en la cual se requieren meter documentos adjuntos pero para eso debo utilizar el BLOB, lo malo es que no se cmo funciona ni como se debe insertar en ese campo, estoy utilizando mysql,dreamweaver y php, si me pudieran ayudar se los agradeceria mucho.

todo me funciona perfecto pero cuando una
imagen es un poco grande (digamos mas de 400 kilos o por ahi) o mas que eso, me da el
siguiente error:

Fatal error: Allowed memory size of 8388608 bytes exhausted at (null):0
(tried to allocate 11844 bytes)

Alguien sabe a que se puede deber este error??

Muchas gracias.

Hola que tal!
Miren mi problema es este:
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'f:/Windows/Temp/' for writing in f:\wamp\www\thumb\blob.php on line 52

Warning: fopen(f:/Windows/Temp/) [function.fopen]: failed to open stream: Permission denied in f:\wamp\www\thumb\blob.php on line 68

Warning: fread(): supplied argument is not a valid stream resource in f:\wamp\www\thumb\blob.php on line 69

Warning: fclose(): supplied argument is not a valid stream resource in f:\wamp\www\thumb\blob.php on line 71
Fotos guardadas

Me guardo la foto pero NO el thumbnail.
Cambie los permisos de la carpeta que contiene blob.php pero vuelvo a mirar sus propiedades y aparece de nuevo tickado solo lectura.
Otra cosa la ruta de NAMETHUMB como es al final??
a:c:\Windows\Temp\
b:c:/windows/temp/thumbtemp
c:c:/windows\temp\thumbtemp

Utilizo wamp5 y lo estoy ejecutando en mi pc.
Grac ias de antemano!

Felicito a quienes ayudan a otros a desarrollar sus sitios web.
Tengo algunos sitios con base de datos, en los cuales subo imágenes blob.
Todo funciona bien, pero necesito desarrollar una galería de imágenes, en que pueda presentar 3 o 4 fotos por fila.
Lo más usual es mostrar un registro por línea, pero me gustan las cosas difíciles. Ya vi un comentario en que proponen hacerlo sin blob, pero tiene que haber algún modo de hacerlo y si alguien lo sabe, mucho agradeceré su ayuda.
Buena Caza

Hola,

Pablo: Al parecer el usuario bajo el que se ejecuta el servidor web, no tiene permisos de escritura sobre c:\Windows\Temp\ (cosa extraña), lo que puedes hacer es definir un directorio donde se tenga estos privilegios. Por otro lado "thumbtemp" es el nombre con el que se crea temporalmente el thumbnail.

Oso Cebado: Como ya había mencionado en comentarios anteriores, para evitar hacer uso de los blobs, tienes que guardar las imágenes en algún directorio de tu servidor web y en tu base de datos sólo guardas esas rutas (nombres) de esas imágenes...

Saludos

HOLA SE QUE MI PREGUNTA ES MUY TONTA, ES QUE ME MANDA ESTE MENSAJE DE ERROR

Fatal error: Call to undefined function: imagecreatefromjpeg()

COMO HAGO ESA FUNCION POR QUE NO LA TENGO

LO SIENTEO PERO TE AGRADECERIA QUE ME DIJIERAS

Hola,
primero felicitar al autor del script por el trabajo realizado y de gran utilidad.
Ahora mi consulta, como es que la imagen no puede superar los 64KBytes? Es decir, si subo una imagen con un tamaño superior, esta es recortada.
Gracias de antemano,

Sergio

Tengo un problemita con el codigo de "verblob.php", sale este error y no se por q es, les ruego q me ayuden ......
ERROR"
Warning: Cannot modify header information - headers already sent by (output started at /home/virtual/site77/fst/var/www/html/CatolicaTV/pages/noticia/verblob.php:5) "
GRACIAS ESTARE MUY AGRADECIDA SI ALGUIEN ME DA UNA MANO!!

Hola, k tal, antes que nada felicitarte y agradecerte el trabajo que cedes al uso de los miles de internautas que no disponemos de los conocimientos necesarios para realizar estas creaciones. te escribo tambien porque tengo un problemilla con el codigo, escribo el nombre, inserto la imagen y cuando le doy a insertar, me sale el error de " pagina no encontrada". Tengo la duda tambien de una vez insertada la imagen en la base de datos, ¿cual es el codigo para recuperarla? he visto el articulo de "mostrar una imagen..., pero veo trozos de codigo que no se componer, ¿podrias ayudarme?

Te dejo el codigo modificado por mi, a ver si hallas el error:

blob.php

Ha este lo llame inicio.html

Imagen a Blob

">
Nombre:
Imagen:

Un saludo!!!

estoy haciendo un proyecto donde necesito guardar una galeria de fotos y guardar sus datos en una base de datos y luego mostrarlas en el navegador con sus datos alguien podria ayudarme estoy trabajando con php , mysql, y dreamweaver
muchisimas gracias

Hola, escribo para avisar a los usuarios de MACROMEDIA DEAMWEAVER que no les funciona el script de ver las imagenes BLOB, a los que les sale la maldita aspa roja en lugar de ver la imagen, tened CUIDADO con el código HTML que añade por defecto Dreamweaver, esa basura hizo que me petara el Script PHP de Braulio, he borrado tooodo el HTML que he dejado el archivo en BLANCO y he copiado SOLO EL CODIGO PHP y funciona de maravilla.
GRACIAS BRAULIO Y ENHORABUENA 😉

Las imagenes las sube perfectas pero las miniaturas no me las crea. Alguien sabe por qué? El caso es q no da ningún error.

El servidor es Linux gestionado desde Plesk.

Un saludo y gracias

Tengo sistema operativo windows xp prof. y trabajo con xampp (www.xampp.org) para hacer y probar mis páginas php. Este script funciona perfectamente sobre el servidor real (cdlbalears.com) pero no hay manera que funcione en modo local para las pruebas. Seguro que es un problema de permisos, pero he probado con define("NAMETHUMB", "c:/windows/temp/thumbtemp");, define("NAMETHUMB", "c:/thumbtemp");, etc., pero en ninguna de estas rutas tengo acceso. ¿Cómo puedo modificar los permisos con xp para este script?

NOTA: He probado con tres ordenadores distintos con xp profesional y xampp, y los tres hacen lo mismo.

Gracias y excelente trabajo con este script!

Ya resolví el problema. Cuando se instala xampp, éste crea una carpeta TEMP en el mismo directorio de xampp (por ej. c:\xampp\temp). He puesto esta ruta como lugar para los archivos temporales, y ha ido bien (por lo visto ahí sí que windows le permite escritura al servidor web de xampp).
Bueno, gracias por todo.
Un saludo.

porfavor necesito ayuda urgente, he tratado incansablemente de arreglar este problema , defini el directorio para guadar los archivos temporales fuera del directorio raiz como dice el articulo en 'c:/windows/temp' y no he podido lograr nada , tambien he tratado de probar con otros directorios a aparte de ese y tampoco resulta, si alguien sabe como arreglar este problema en SO WINDOWS le agradeceria su ayuda

Warning: imagegif(): Unable to open 'c:/windows/temp' for writing in d:\www\fotos\foto.php on line 58

Warning: fopen(c:/windows/temp): failed to open stream: Permission denied in d:\www\fotos\foto.php on line 73

Warning: fread(): supplied argument is not a valid stream resource in d:\www\fotos\foto.php on line 74

Warning: fclose(): supplied argument is not a valid stream resource in d:\www\fotos\foto.php on line 76
Fotos guardadas

hola de nuevo en caso de que no se pudiera arreglar el problema que tengo sobre los permisos de las carpeta , hay alguna forma de modificar el script
para que en ves de que el archivo temporal se guarde en un directorio especificado , se pueda guardar en una variable o algo haci

muy muy bueno, felicitaciones, tengo una pregunta
¿el lo mismo poner
if($_POST) o if($_POST["enviar"])
en lugar de
$postback = (isset($_POST["enviar"])) ? true : false;
if($postback) ? gracias

Buenas, soy nuevo en lo que es hacer paginas dinamicas,asi que encontre intenresante este post. Mi pregunta es como puedo poner las imgenes si utilizo el phpmyadmin?
Les agradeceria que me respondieran

El phpmyadmin no tiene nada que ver aquí. El phpmyadmin sólo es una ayuda para administrar tu base de datos mysql mediante web, tú sólo sigue los pasos que expliqué y todo irá bien. Saludos

Saludos Braulio, la unica modificacion que hago es en el formulario
action="" por

Fatal error: Call to undefined function: imagecreatefromgif() in /home/webcindario/vision-digital/thumbs/blob.php on line 38

Saludos Braulio, la unica modificacion que hago es en el formulario
action="" por
action="blob.php", tambien puse mi formulario foto y blob.php en una carpeta,
y mi error es el siguiente:
Si cargo una foto jpg
Fatal error: Call to undefined function: imagecreatefromjpeg() in /home/webcindario/vision-digital/thumbs/blob.php on line 35

Si cargo una foto gif

Fatal error: Call to undefined function: imagecreatefromgif()
in /home/webcindario/vision-digital/thumbs/blob.php on line 38

en el caso del jpg da igual subir una foto jpg o jpeg ? ya que en el codigo esta
"image/jpeg"
y yo subo fotos jpg, solo es una incognita. espero tener respuesta, gracias.

Bto: el error que sale es porque no tienes la librería GD para manipular las imágenes. En el inicio del artículo explico que cosas necesitamos y como podemos instalar esta librería.

Ok, pero dime, yo no tengo el php en mi computadora, lo unico que yo hago es copiar los codigos y cargarlos en mi servidor miarro.com y desde ahir ver como se ejecuta los codigos(php,html,etc) en mi web, podrias ayudar en este caso.
hasta ahora, he hecho conexion a mi BD mysql, ingresar registros a mi tabla y hacer busqueda, ahora me gustaria guardar fotos a mi tabla, eh ir armando un pequeño sistema, y como te digo solo creo los codigos y lo cargo a mi web, que soporta obviamente codigo php. Saludos Braulio.

Debido a que miarroba es un servicio gratuito no soporta la extensión GD para la manipulación de imágenes, las fotos originales puedes guardaras fácilmente en tu base de datos, pero lo que no se puedes es crear miniaturas y guardarlas.

Si deseas sólo guardar las fotos originales, borra la parte del script desde donde dice:
// Creando el thumbnail
hasta
# contenido de la foto original

Y también desde:
# contenido del thumbnail
hasta
// Borra archivos temporales si es que existen

Y tu tabla ya no debería tener el campo thumb, porque este ya no existe. Si tienes mas dudas contáctame.

necesitari aque me dijeras si tengo que cambiar el permiso de las carpetas y como lo hago si estoy en windows...

es para mi galeria de imagenes..

gracias

Braulio, quise contactarme contigo desde donde dice contacto, pero al enviar la informacion, salio error, asi que me vi en la necesidad de hacerlo por este medio. Creo que es porque envio mucho texto, asi que lo hare en dos partes.
Hice las modificaciones del caso, pero me sigue arrojando error, este es el script que tengo:

No puedo enviarte toda la informacion, asi que solo te dire el error que me vota.
Warning: fopen(): open_basedir restriction in effect. File(/tmp/phpXusuEk) is not within the allowed path(s): (/home/webcindario/vision-digital) in /home/webcindario/vision-digital/thumbs/blob.php on line 32

Warning: fopen(/tmp/phpXusuEk): failed to open stream: Operation not permitted in /home/webcindario/vision-digital/thumbs/blob.php on line 32

Warning: filesize(): open_basedir restriction in effect. File(/tmp/phpXusuEk) is not within the allowed path(s): (/home/webcindario/vision-digital) in /home/webcindario/vision-digital/thumbs/blob.php on line 33

Warning: fread(): supplied argument is not a valid stream resource in /home/webcindario/vision-digital/thumbs/blob.php on line 33

Warning: fclose(): supplied argument is not a valid stream resource in /home/webcindario/vision-digital/thumbs/blob.php on line 35
Column count doesn't match value count at row 1

Gracias por seguir de cerca mi caso, espero porfavor me puedas ayudar, recuerda que solo quiero guardar fotos a mi tabla, saludos Braulio

el error es de tipo 1064
debes conocerlo bien si sabes m,ucho de MySQL, ademas me indique que revise el manual de syntrax y ademas me sale el siguiente error [foto blob not null]

Bto, cuando open_basedir está activo se restringe el uso de las funciones que manipulan archivos, esto es porque webcindario es una comunidad y tienen que tener seguridad para todos sus usuarios. Supongo que tendrás que cambiarte de hosting.

Bueno supongo que ezo debe zer ^^ no?, puedez recomendarme un hosting gratis en donde pueda uzar todoz loz recurzoz del php con base de datos, gracias por todo.

En definitiva, puedo insertar o guardar registros a mi tabla pero no puedo guardar fotos a mi tabla?, estas zeguro.

Excelente codigo, en geberal todo esta muy bien. En internet se consigue mucho codigo basura y que no sirve o tiene problemas de sintaxis pero este me funciono a la primera prueba que realice. Muchas gracias.

son unos idotas, como se ponen a preguntar si no saben, como crear tablas, de verdad se maman.

hola esta muy bien el codigo yo estoy batallando porq tengo una base de datos pero en mysql use phpmyadmin para crearla pero ahora quiero ingresar una foto y no se como acerle alguien sabe me urge

hola amigos, me ha ayudado mucho este script, todo esta cojonudo, pero la cosa es que al grabar y revisarlo en mysql no me guarda en el campo thumb solo la foto normall, a que se debe, no me muestra error alguno.

Anotacion: Estoy trabajando con el Apache, y en windows xp. como os dije no me da error alguno. he cambiado las carpetas de los temporales y sigo con lo mismo.

Ya he solucionado el problema: en el caso de windows
define("NAMETHUMB", "c:/tmp/thumbtemp")
ya que por defecto era c:/windows/temp y no existia la carpeta
Gracias por todo.

Veo que algunos se estan volviendo locos con este problema de permisos ejemplo y en realidad lo que estais haciendo mal es que estais definiendo la ruta con una carpta que ya existe y por eso os da problemas de escritura.

Como bien dice el error
Warning: imagegif(): Unable to open 'c:/windows/temp' for writing in d:\www\fotos\foto.php on line 58 esta claro que no puedes escribir una carpeta que ya existe y es tan importante como esa.

Solución:

define("NAMETHUMB", "c:/windows/temp/thumbtemp");
y asegurate de que no exista ningun carpeta en c:/windows/temp que se llame thumbtemp porq te dara el mismo problema.

P.D. Quizas llegue muy tarde

Simplemente: felicidades !!!! Es de agradecer el trabajo que has realizado y también a los foreros que con sus preguntas y dudas acaban de hacerlo más comprensible.

De nuevo: MUY BUEN TRABAJO.

Me gustaría poder aplicarlo en mi página personal y solicito si me puedes decir si es necesario que en el script te haga referencia o lo dispones como freeware. Por favor, respóndeme a mi cuenta de correo porque no sé si volveré a pasarme por aquí.

De nuevo: gracias!. Cuanta mente genial corretea por ahí ...

Hola Braulio, te felicito muy buen articulo, estuve corriendo buscando y probando varios código y ninguno funciona tan genial como este, gracias por colaborar con las personas que estamos aprendiendo cosas nuevas... Me funciono al primer intento.

También use el script para mostrar la imagen... voy a invorporalo a la aplicación que estoy haciendo si tengo algún problema, te puedo preguntar???

Tengo un problema cuando coloco
switch($type) {
case $mimetypes[0]:
case $mimetypes[1]:
$img = imagecreatefromjpeg($tmp_name);
break;
case $mimetypes[2]:
$img = imagecreatefromgif($tmp_name);
break;
case $mimetypes[3]:
$img = imagecreatefrompng($tmp_name);
break;
} siempre me aparece error, aunque ya e guardado imagenes en mysql, pero necesito realmenet identificar el tipo, si alguiene me puede ayudar se lo agradeceria por favor?

Hola Braulio, necesito tu ayuda urgente.

Estuve utilizando tu codigo, el cual me parecio muy bueno, y lo probe en el localhost de mi pc y funciono muy bien, pero cuando publico mi pagina en Internet me salen los siguiente errores:

Warning: imagejpeg(): Unable to open 'c:/WINDOWS/Temp/thumbtemp' for writing in /home/content/j/a/a/jaazz4/html/blob.php on line 66

Warning: fopen(c:/WINDOWS/Temp/thumbtemp): failed to open stream: No such file or directory in /home/content/j/a/a/jaazz4/html/blob.php on line 82

Warning: filesize(): Stat failed for c:/WINDOWS/Temp/thumbtemp (errno=2 - No such file or directory) in /home/content/j/a/a/jaazz4/html/blob.php on line 83

Warning: fread(): supplied argument is not a valid stream resource in /home/content/j/a/a/jaazz4/html/blob.php on line 83

Warning: fclose(): supplied argument is not a valid stream resource in /home/content/j/a/a/jaazz4/html/blob.php on line 85

Fotos guardadas

Ademas a la hora de mostrar las imagenes me sucede lo mismo, es decir solo funciona en el localhost pero no se muestra ninguna imagen cuando trabajo en el servidor real de mi pagina web.
Please respondeme

Estimada Luisa, el sistema de archivos de tu computadora es diferente a la de tu servidor, para que funcione correctamente en este último, verifica que NAMETHUMB tenga el siguiente valor:

define("NAMETHUMB", "/tmp/thumbtemp");

Saludos

Estimado Alex, muchas gracias por tu ayuda.
Logre solucionar el problema al momento de guardar los thumbs, pero igual sigo sin poder mostrar las imagenes.
Te agradeceria mucho si me ayudaras.

Saludos

Hola muy bueno el codigo y la explicacion. Tengo un solo inconveniente, cuando guardo imagenes grandes, al verlas aparecen cortadas, no se si lo que esta generando este error es la capacidad de almacenamiento del campo blob u otro motivo. Te agradeceria una respuesta. Muchas Gracias

Esta muy bueno todo esto de gurdar la foro en my sql, pero tengo una pregunta alguien sabe como cambiar la interfaz de html por una en flash 8 si la tienen me la podrian facilitar.............

Gracias

Donde puedo descargar PostgreSQL ..... por que la mayoria de las paginas o cobran o dan errores ...........les a gradeceria.............

Abrahan, tienes varios mirrors de donde descargar, no te pongo enlaces porque no sé si necesitas los binarios o el código...

Saludos

No se complique la vida muchos de los erros que da el script es porque "NAMETHUMB" en algunos casos aparece sin las comillas es decir de esta manera NAMETHUMB, la solucion es agregarlas

Ayuda porfa, que significa este error:

Warning: imagejpeg() [function.imagejpeg]: Unable to open 'C:/tmp/thumbtemp' for writing in C:\MiServer\WEB\prueba_php\blob.php on line 60

Warning: fopen(C:/tmp/thumbtemp) [function.fopen]: failed to open stream: Permission denied in C:\MiServer\WEB\prueba_php\blob.php on line 76

Warning: fread(): supplied argument is not a valid stream resource in C:\MiServer\WEB\prueba_php\blob.php on line 77

Warning: fclose(): supplied argument is not a valid stream resource in C:\MiServer\WEB\prueba_php\blob.php on line 79
Fotos guardadas

Todo es casi perfecto, puedo guardar imagenes y puedo visualizarlas, mi problema es que cuando muestro la imagen de mi base de datos y quiero mostrar los demas campos de mi tabla simple y sencillamente no se visualizan, solo se visualiza la imagen y nada más.

¿QUE PUEDO HACER? para mostrar lod demás datos ademas de la imagen en la misma página

Hola braulio me manda este error y tengo activada la libreria que mencionaste
atal error: Call to undefined function imagecreatefromjpeg() in C:\wamp\www\imagenes\subir.php on line 35
prodrias alludarme. gracias

Hola me da gusto que por fin un script me ingrese imagenes y datos......Solo que en el borwser me marca muchos errores......como estos:
Warning: imagejpeg() [function.imagejpeg]: Unable to open '/tmp/thumbtemp' for writing in C:\Program Files\xampp\htdocs\hemsa\fotos\blob.php on line 52

Warning: fopen(/tmp/thumbtemp) [function.fopen]: failed to open stream: No such file or directory in C:\Program Files\xampp\htdocs\hemsa\fotos\blob.php on line 68

Warning: filesize() [function.filesize]: stat failed for /tmp/thumbtemp in C:\Program Files\xampp\htdocs\hemsa\fotos\blob.php on line 69

Warning: fread(): supplied argument is not a valid stream resource in C:\Program Files\xampp\htdocs\hemsa\fotos\blob.php on line 69

Warning: fclose(): supplied argument is not a valid stream resource in C:\Program Files\xampp\htdocs\hemsa\fotos\blob.php on line 71
Fotos guardadas

Me gustaria que alguien me compartiera un poquito de sus conocimientos para la solución de estos problemas.....De antemano le agradezco su ayuda...Saludos....bye

Hola ya corregi los errores que me marcaban....pero me gustaria que en la misma pagina se mostraran las imagenes en una tabla o algo asi...es para un proyecto que tengo de galeria de imagenes.....¿se puede hacer esto? de antemano gracias por tu ayuda bye

Para hacer eso necesitas de 2 páginas, una que muestre sólo una imagen (a.php) y otra que se encargue de mostrar el listado de imágenes, que haga referencia a la página a.php a través del tag img

html:

<img src="a.php?id=123" />

Saludos

Hola soy nuevo en esto de MySQL, perdon si pregunto algo obvio.
Como se tiene que llamar la base, y que campos debe tener con que nombres para que funcione el script. Muchas gracias

Bueno, aunque mi script está bastante modificado en cuanto al uso de la base de datos y la forma en que son llamados, tiene como base los que se presentan en esta página, implementando el uso de un buffer de memoria, ya que el servidor web no permitía la escritura de un archivo temporal, y en vista de que la política de permisos de escritura no cambiaría, use este recurso.

Esto resolvería los problemas de aquellos similares a estos warnings/errores:
Warning: imagejpeg() [function.imagejpeg]: Unable to open '/tmp/thumbtemp' for writing in C:\x on line YY

Warning: fopen(C:/tmp/thumbtemp) [function.fopen]: failed to open stream: Permission denied in C:\x on line ZZ

que a fin de cuentas significan que no pueden abrir el directorio temporal, ni crear un archivo temporal en el mismo.

bueno, les dejo los dos links, por si alguien desea adaptarlo al script que hay en esta página, son únicamente 3 o 4 líneas extras, y algunos // para comentar.

http://mx.geocities.com/alvinheregod/galeriaAgregarINC.php
http://mx.geocities.com/alvinheregod/tempthumb.php

se puede poner como comentario el include del tempthumb por si no se quiere crear el thumbnail.

saludos.

excelente tu codigo, me funciona a la perfeccion, realmente te felicito.....
pero tengo una duda, como puedo redimencionar la imagen original y tambien hacer el thumb, necesito establecer las dimenciones de la imagen original para que no me desforme la pagina cuando suban las fotos los usuarios, y a la vez crear el thumb para ponerlos en una galeria... te agradeceria que me ayudaras ya que soy nuevo en esto y estuve haciendo varias pruebas con tu codigo, pero no resulto....

saludos y gracias

Profa, es urgente,
después de leer una foto en PHP me sale esto:
Warning: imagegif(): Supplied argument is not a valid resource
No se porque pues bajé un ejemplo y todoest`´a igual, leo un .Gif, lo proceso y ya. Ojalá alguién me pueda ayudar..

Antes que nada gracias por el codigo, esta muy bien, pero tengo un problema, todo me funciona bien, me inserta ambas imagenes en la db y todo el rollo, pero lo unico que veo que no me funciona es que en la creacion del thumbail me arroja la imagen reducida por el navegador y nunca me muestra la frase "fotos guardadas", que puede ser.

Saludos, Sebastian.

hola a todos y en especial a quie fomento todo esto, estoy que trato de hacer una pagina donde incerte una imagen cualquiera de donde sea y quien sea, pues encontre esta que me esta ayudando, muy buen articulo, ahora estoy en mi trabajo pues no tengo mi script en el que me muestra el error, lastimosamente no tengo internet en mi casa y aqui en el trabajo pues no puedo. solamente escribia para saludar

Hola , he utilizaod el codigo y me funciono muy bien para guardar las imagenes en la BD mysql, pero ahora tengo el problema de mostrar; en realidad quiero mostrar todas las imagenes de la BD a la vez,pero cunado trato de modificar el codigo que, muestran en esta página, solo me imprime la primera imagen, y no las demas, alguna sugerencia por favor..

Saludos a Mare....TQM!!!!

Hola, sigo teniendo problemas con el script, el error que me da es el siguiente:
Warning: fopen(c:/windows/temp/thumbtemp): failed to open stream: Permission denied.

Estoy probando todo local, pero no logro dar con la tecla, sin embargo esa carpeta existe, que puede estar pasando?

Gracias de antemano.

Sebastian M

UN SALUDO

PROBE EL SCRIPT Y DE MANERA LOCAL SI FUNCIONA EL PROBLEMA ES CUANDO LO CORRO EN EL SERVIDOR REMOTO, PONGO LOS ERRORES QUE ME MARCA:

Warning: imagejpeg() [function.imagejpeg]: Unable to open 'c:/windows/temp/thumbtemp' for writing in /home/compraza/public_html/admin/noticias.php on line 110

Warning: fopen(c:/windows/temp/thumbtemp) [function.fopen]: failed to open stream: No such file or directory in /home/compraza/public_html/admin/noticias.php on line 126

Warning: filesize() [function.filesize]: Stat failed for c:/windows/temp/thumbtemp (errno=2 - No such file or directory) in /home/compraza/public_html/admin/noticias.php on line 127

Warning: fread(): supplied argument is not a valid stream resource in /home/compraza/public_html/admin/noticias.php on line 127

Warning: fclose(): supplied argument is not a valid stream resource in /home/compraza/public_html/admin/noticias.php on line 129
Access denied for user: 'compraza_demo@localhost' to database 'demo'

POR FAVOR SI ME PUDIERAN AYUDAR, EL CODIGO ESTA TAL Y COMO LO MUESTRAN, SOLO CLARO CAMBIANDO EL NOMBRE DE LA BASE DE DATOS

DE ANTEMANO MUCHAS GRACIAS

a mi me funciona muy bien bueno al menos al insertar pero no se como visualizarlas, me podrias ayudar ???

Hola Braulio tu Script esta muy bien hecho..
mi problema es que quiero actualizar pero no me hace nada podrias ayudarme

HOLA, bueno se ve interesant el ejemplo que detallas, lo probe pero no me sale :(, me sale el siguiente error
Fatal error: Call to undefined function imagecreatefromjpeg() in C:\wamp\www\subirimgBD\blob.php on line 35

que no existe tal funcion, si pudieras ayudarme a resolver ese proglema plz, desde ya muchas gracias

asi omita esa funcion me sale nuevamente otro error con una funcion que se encuentra mas abajo
en pocas palabras no me acepta esas funciones q hicist en tu script
los pasos que indicast con el php.ini y el archivo los hice, pero no creo q eso sea el problema, spero puedas ayudarme

sii lo hice, reinici el apache una vez q habilite tal modulo pero me sigue saliendo el mismo error. uhmm a q se debera, no me acepta tales funciones :s
spero puedas encontrarle alguna solucion.GRACIAS

hola nuevamente, disculpa que t molesta tanto :$ mira estuve revisando mi phpinfo y no me aparece la tabla de la libreria grafica, agregue el archivo php_gd2.dll, del cual lo descargue de tu web, tbm agregue el nomnre en php.ini, reinicie el apache pero = no me sale la tabla de la libreria grafica, no entiendo porque, supuestament deberia salirme pero nada
a ver si me pudieras ayudar con esto plz

quizas sea porque utilizo el php 5.2, el mysql 5, el apache 2.0, ahh y todo esto me vino en un paquete que se llama el wamp 5, quizas sea ese el problema???

Vaya, me he confundido y he pegado mi post en el articulo equivocado, vuelvo a postearlo aquí, a ver si alguien sabe darme una solución.
-----------------------------------------------------------
Muy bueno tú código. El caso es que tengo un problema, el server tiene activado el SAFE_MODE con lo cual no puedo ejecutar algunas funciones como fopen(); fread(); fclose()... Me preguntaba si sabrías alguna forma de solucionarlo ya que así, guarda la imagen, pero no puede crear el thumb. Te pasteo la salida por si te sirve de algo.

Warning: fopen(): SAFE MODE Restriction in effect. The script whose uid is 10067 is not allowed to access /tmp/thumbtemp owned by uid 48 in /home/httpd/vhosts/asordes.org/httpdocs/probas/blob.php on line 68

Warning: fopen(/tmp/thumbtemp): failed to open stream: Success in /home/httpd/vhosts/asordes.org/httpdocs/probas/blob.php on line 68

Warning: filesize(): SAFE MODE Restriction in effect. The script whose uid is 10067 is not allowed to access /tmp/thumbtemp owned by uid 48 in /home/httpd/vhosts/asordes.org/httpdocs/probas/blob.php on line 69

Warning: fread(): supplied argument is not a valid stream resource in /home/httpd/vhosts/asordes.org/httpdocs/probas/blob.php on line 69

Warning: fclose(): supplied argument is not a valid stream resource in /home/httpd/vhosts/asordes.org/httpdocs/probas/blob.php on line 71

Fotos guardadas

Tal vez exista alguna forma de forzar a que se ejecuten estas funciones, o alguna otra forma de crear el thumbnail.

Gracias!!
------------------------------------------------------------
Se me acaba de ocurrir que ya que el problema está en los thumbs, lo que podría hacer sería crear los thumbs para mostrar la galería a partir de campo blob de la BD.
Sería factible?

Gracias de nuevo!

disculpa pero tu script me da el siguiente problema:

Se ha guardado el Archivo en la base de Datos
Warning: imagejpeg() [function.imagejpeg]: Unable to open '/home/paradoxl/public_html/uploads' for writing in /home/paradoxl/public_html/administrador/subir_produc.php on line 102
Fotos guardadas
Warning: imagejpeg() [function.imagejpeg]: Unable to open '/home/paradoxl/public_html/uploads' for writing in /home/paradoxl/public_html/administrador/subir_produc.php on line 166
Fotos guardadas

EL DIRECTORIO TIENE PERMISOS 777 Y NO SUBE, AYUDAME POR FAVOR DE VERDAD LO NECESITO URGENTEMENTE...

Quan, no he probado lo que te voy a decir, pero si usas un directorio en el que no se aplique las restricciones safe_mode (ej. /home/httpd/vhosts/asordes.org/httpdocs/probas/thumb/), talvez evites el problema que describes.

Luis, si no hiciste ninguna modificación al script y en verdad tiene los permisos que dices, talvez sea porque tu servidor tiene SELinux activado

Hola amigo,

muy interesante tu articulo, es lo k andava buscando, pero me puedes orientar k va dentro de cada archivo y los nombres k les diste, osea como distibuyes el codigo k ofreces en la pagina, de antemano gracias

tengo un servidor de mysql con miles de imagenes tipo blob, quiero cargarlas en un formulario de .net, pero no puedo ya sea con c# o vb .net, si por favor alguien me puede ayudar....

hola, bueno yo escribo porque tengo un problemita con este scrip, me sale un error de "Call to undefined function: imagecreatefromjpeg()" de verdad que no tengo idea porque me sale esto, yo tengo instalado el php_gd2.dll y esta activo y todo, pero me sale este error, por favor si alguien me puede ayudar, se lo suplico es urgente, gracias.

hola, gracias por la respuesta, pero realmente no entendi mucho que digamos, en que parte se colocan esas etiquetas, si me puedes responder te lo agradeceria muchisimo.

Hola, he leido las respuestas, incluso las más antiguas. A mi me guarda la imagen grande, pero no me guarda el thumb y tengo puesto:

define("NAMETHUMB", "/tmp/thumbtemp");

¿Qué puedo hacer?

también he probado con:

define("NAMETHUMB", "c:/windows/temp/thumbtemp");

y tampoco me funciona.

Lo curioso es que subo la página a un servidor gratuito y si funciona. en la base de datos esa si guarda el thumb.

Alguna idea?
No me da ningún error. solo deja en blanco el thumb.

Gracias!.

ok, eso mismo ya lo he podido solucionar yo :D, gracias a dios y despues de muchas vueltas resultaba que tenia el define con una letrita mal jejejeje, tonteria de las grandes.

Ahora mi problema es otro.

Quiero mostrar las miniaturas una al lado de la otra, para que luego al pinchar en ella se muestre la grande. El caso es que solo me muestra 1 foto. Pongo lo que tengo escrito, a ver si podeis echarme una manilla 😀

while ($i

php:

while ($i 4)
 {      

           $idfoto = $i;
       
      $tam = 1;
       
            switch($tam)
      {
                    case "1":
                             $campo = "foto";break;;
                    case "2":
                             $campo = "thumb";break;;
                    default:
                         $campo = "foto";break;;
           }
       

            $sql = "SELECT $campo, mime FROM ImgFinal WHERE idfoto = $idfoto";
                       

        $link = mysql_connect(DBHOST, DBUSER, DBPASSWORD) or die(mysql_error($link));;
        mysql_select_db(DBNAME, $link) or die(mysql_error($link));
       
        $conn = mysql_query($sql, $link) or die(mysql_error($link));
        $datos = mysql_fetch_array($conn);
       

        $imagen = $datos[0];

        $mime = $datos[1];
       
       

       
  header("Content-Type: $mime", FALSE);
 
       
        echo $imagen;
       
        $i++;
}

a ver si ahora si me sale el código, perdón, estoy algo espesito hoy 😀
En el while sé que falta el símbolo de menor, pero es que si lo pongo no me deja postear el código.

como siempre me autorespondo 😀 gracias de todas formas, por si le vale a alguien mi solución es crear un php que haga lo siguiente:
mire cuantas fotos hay en la bd
y repita esta instrucción tantas veces como fotos haya en la bd:
echo "";

Donde MostrarFotosAlbum es el php que tiene el script ese que he puesto arriba, id_foto es el id de la foto que quiero mostrar y tam_foto es para que me muestre la foto normal o el thumb.

Si alguien necesita algo más que lo ponga por aquí 😉

Ahh, en el script de arriba he modificado que recojo por GET las variables que le envio en la etiqueta IMG

Hola a todos, y gracias por este articulo, pero me asalta una duda, como puedo hacer que se agregue la fecha de subida de la foto automaticamente.........
desde ya, muchas gracias

hola, por favor es que soy novato en esto, quiero algo mas claro,de como insertar una imagen en una celda.

Hola,Necesito ayuda. Como hago para descargar un archivo con PHP y BD MySQL.
La conexion a la BD funciona bien y este es el resto del codido:
$query="SELECT * FROM curriculum WHERE idpostulante='$idpostulante'";
$res=mysql_query($query);
$tipo = mysql_result($res,0,'tipo');
$contenido = mysql_result($res,0,'contenido');
header('Content-type: $tipo');
print $contenido;
Y no funcionaa!! MIL GRACIAS

Hola, tenia un problema pero ya lo solucione,
El tema es que tenia este código en un servidor Linux y me estoy cambiando a uno Windows,

entonces cambiaba esto
define("NAMETHUMB", "/tmp/thumbtemp");
Por esto
define("NAMETHUMB", "c:/windows/temp/thumbtemp");
y no andaba ni pa atrás!!!
Entonces no se por que se me ocurrió cambiar
"c:/windows/temp/thumbtemp"
por

"E:/windows/temp/thumbtemp"

y empezó a funcionar perfecto!!!!

Espero que a alguien le sirva!

Saludos!!!

tengo una duda ....si quiero poner tu codigo en mi pagina ..
como tengo que hacerte referencia a ti ?? cual es la forma que mejor es para usted ??

por favor responder esta pregunta...

he luchado tanto con este codigo XD pero alfin funciono ...

nos vemos

y suerte

Hola quisiera saber si existe la posibilidad de que puedar haber conflictos con la libreria gd. Ya que luego de instalarla en mi servidor tengo problemas con la funcion readfile para descargar archivos desde la web. Alguien tiene idea de que pueda ser?

porque me sale esto:

Fatal error: Call to undefined function: imagecreatefromjpeg() in \www\cas\prueba.php on line 35

Hola a todos:

os cuento lo que quiero hacer y a ver si me podeis echar una mano.

En una de mis páginas web le doy la posibilidad al usuario de añadir fotos.
Tengo un input file y el valor que recojo en este lo envio por get a un iframe.
En este iframe recogo por get lo elegido en el input file(ruta+nombre del archivo - ruta local del usuario)y lo valido(veo tamaño,formato y lo redimensiono para que lo previsualize antes de insertarlo en la bd).
Si la foto cumple los requisitos de tamaño(inferior a x bytes) y formato las voy guardando en sesion y despues cuando el usuario está conforme ingreso una nueva ruta de la imagen en bd y copio la imagen a una carpeta del servidor.

¿Cúal es el problema?

Todo me funciona correctamente localmente(windows) pero cuando lo subo al servidor(linux) no me funciona.

He detectado que filesize no me funciona, no me devuelve tamaño.Tampoco me funciona getimagesize(lo utilizo para redimensionar la imagen a la hora de previsualizarla)
Este es mi codigo, comienzo por filezise:
$ruta_imagen-->ruta del usuario recogida por get
$barra=stripslashes($ruta_imagen);
$tamano=filesize($barra);
echo $tamano;--> lo devuelve vacio...

y me devuelve este error:
warning: filesize(). Stat faile for...ruta de la imagen....(errno=2 - No such file or directory)

¿Como puedo solucionar esto?

Gracias, un saludo

hola a todos/as,

localizé el error y era porque en filesize() buscaba la ruta+archivo elegido en el input file en el servidor, y claro esa ruta+archivo no existe en el servidor puesto que es la ruta que elige localmente el usuario en el input file...

al final lo solucione enviando el input file por post en lugar de get...bueno un lio...

gracias, un saludo

cabrso este es mi drama y de verdad que ni idea ayudenme porfa y salvenme el pellejo
Column count doesn't match value count at row 1

muy buen tutorial, es lo que andaba buscando, solo una pregunta, cuando quiero extraer la imagen de la BD para verla en la pagina, como lo hago?? es una simple consulta select??

Hola tengo un problema estoy guardando pdf y doc en mysql pero cuando los extraigo el doc forza la descarga pero el pdf lo abre y no quiero que se abra quiero q me aparezca si lo quiero guardar y es desde la base de datos que se encuentra no en directorios ni nada

Tengo una pregunta. El script guarda en la DB algunos datos, pero cuando quiero imprimir la imagen me aparece solo una parte de la misma y no la imagen entera, que puede ser???
Desde ya muchas gracias.

Buena genios, me hacen acordar alos tres chiflados jijiji...
Bueno, hasta ahora no se xq no aparecen los thumbnails en c:/windows/temp/thumbtemp, he recontraborrado y copiado y tambien he puesto una ruta en D, porqu uso xampp, pero nada, si tienen la clave pasenla, y finalmente sinceramente muchas gracias, por compartir su genialidad conmigo, un abrazo, Alberto

hola si alguien me puede ayudar a crear una funcion que me permita realizar consulta auna base de datos Mysql desde un formulario en php

Hola estoy construyendo una aplicacación educativa en ASP .Net, mi problema radica en que necesito guardar imagenes en la base de datos para despues mostrarlas en una especie de formulario; he intentado mil formas y nada.

Auxilio!!

Al usar los codigos me sale este error...

Fatal error: Call to undefined function imagecreatefromjpeg() in C:\wamp\www\HIPER\blob.php on line 40

Cómo puedo saber la ruta de acceso a la carpeta de archivos temporales del servidor donde tengo alojada la página.Por cierto, es un servidor Linux.

Fatal error: Call to undefined function imagecreatefromgif() in C:\wamp\www\test\blop.php on line 39

tengo ese error de funcion ahora que cambie los permisos los vi si cambia vastante , sin embargo al buscar el temporal no lo encuentra y ovio y sale el error , alguna forma de solucion , para despues seguir con el siguente paso ..
o mandanos algo hecho verlo analizalo , lo otro cuando llamo

a

localhost/test/blop.php en firefox me sale como desea guardar .....

msn zeroyevi@hotmail.com

Salu2 a to2 antes ke nada grax por el skript pero tengo un problema, en imagenes pekeñas me funciona perfekto, la kosa es si kiero wardar una imagen eskaneada (en este kaso una imagen tamaño oficio) me manda el siguiente error

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 5100 bytes) in C:\AppServ\www\Digitaliza\PruebaGuarda.php on line 35

y le kambie a longblob la foto pero aun asi me sigue markando lo mismo

Braulio: Auxiliooooooo !!!! plase...!!!

Primero que nada un millon de gracias por lo que publicaste creo que somos mucha gente interesada en el tema, pero resulta que yo tengo un problema con el programa y te confieso que estoy en mis primeros pasos de aprendizaje, por favor indicame que pasa con este mensaje que me sale:

Archivo no encontrado

Firefox no puede encontrar el archivo en C:/Documents and Settings/Skynet/Escritorio/SiteId/ ?PHP echo $_SERVER[PHP_SELF];?>. "

* Compruebe que ha escrito correctamente las mayúsculas en el nombre del archivo.

* Compruebe que el fichero no haya sido movido, renombrado o eliminado.

Te agradeceria mucho tu valiosa ayuda. wow soy el post Num. 200

Una pregunta mas..... jejejeje y si quiero guardar hasta 4 o 5 imagenes en el mismo registro? ¿como le hago?

GRACIAS.

Hola, me pueden ayudar ya que realize el script paso a paso pero en el momento de guardar la imagen me sale este error ayuda
Fatal error: Call to undefined function imagecreatefromjpeg() in c:\wamp\www\cargar_imagen\index.php on line 35

soy muy novato en php,,, y n se como solucionar este problemilla. ustedes me pueden enviar el script que este funcionando y yo lo comparo con el mio. para sacar el error.. gracias

Bueno, primeramente mis felicitaciones por el script publicado, me aprece excelente para la publicacion de imagenes. Ya lo probe y funciona bien, almacena los datos en la tabla, sin embargo, no me esta guardando las imagenes "thumb" dentro de la base de datos, cuando hago el "SELECT thumb FROM tabla"; no me muestra nada, muestra que hay una fila guardada, pero la casilla esta en blanco.Les agradeceria mucho si me puedes ayudar a encontrar el problema. De antemano, muchas gracias por la ayuda.
e-mail: dpernia@ula.ve

Hola, antetodo te doy las gracias, porque tu ejemplo me ha ayudado un mucho! Gracias a tu ejmplo podre dormir esta noche, jejeje!
Saludos

pero una pregunta..te pareceria optimo manejar el mime type a nivel de php en vez de bd? cual seria la ventaja de manejarlo en el servidor de la aplicacion?

porque al subir una imagen solo me permite almacenar 64 kb si es mayor a ese peso, dejandome una imagen cortada???

modifique el codigo a diferencia de este no copia las imagenes en la carpeta solo en la base de datos .

si muestra la imagen miniatura y la original.

solo modifiquen la conexion el query la base de datos etc.

que tal buen día, saludos!
no creo que sirva de mucho enviar este comentario porque como muchos, tengo el error de que cuando hago las pruebas con mi servidor linux, simplemente no me deja guardar ningun archivo, intenté con el directorio /tmp/ y aun así no me ha dejado. encontre por ahi el comentario de un tal Alvin pero el link que dejó no funciona, alguien preguntó sobre crear la miniatura a partir de la imagen en mysql.
en fin, alguna sugerencia?
yo no pido queme solucionen todo pero que me den aunque sea alguna pista, gracias nuevamente

alguien soluciono el tema del directori de trabajo pero en linux...yo sigo teniendo problema con el guardado no reconoce el directorio

Warning: imagejpeg() [function.imagejpeg]: Unable to open '“/home/gi000347/public_html/ElEstudioFoto/tmp/' for writing in /home/gi000347/public_html/ElEstudioFoto/Alta2.php on line 58

Warning: fopen(“/home/gi000347/public_html/ElEstudioFoto/tmp/) [function.fopen]: failed to open stream: No such file or directory in /home/gi000347/public_html/ElEstudioFoto/Alta2.php on line 74

Warning: filesize() [function.filesize]: Stat failed for “/home/gi000347/public_html/ElEstudioFoto/tmp/ (errno=2 - No such file or directory) in /home/gi000347/public_html/ElEstudioFoto/Alta2.php on line 75

Warning: fread(): supplied argument is not a valid stream resource in /home/gi000347/public_html/ElEstudioFoto/Alta2.php on line 75

Warning: fclose(): supplied argument is not a valid stream resource in /home/gi000347/public_html/ElEstudioFoto/Alta2.php on line 77

ya he cambiado con tmp y todas las artmiñas anteriores

Para los que les pueda servir y trabajen en windows XP o vista:
También tenía el problema de los permisos a la hora de crear la imagen. Trabajo con windows y xampp. El script me funcionaba perfectamente en un servidor linux tal como está, pero no en windows. Siempre me aparecía el dichoso "Unable to open ... for writing in ..." y no subía la imagen. Así que cambié un poco el script y lo puse de la siguiente manera:
...
$urltmp="C:/xampp/tmp/";
switch($type) {
case $mimetypes[0]:
case $mimetypes[1]:
$img = imagecreatefromjpeg($tmp_name);
$urltmp=$urltmp."imatge.jpg";
break;
case $mimetypes[2]:
$img = imagecreatefromgif($tmp_name);
$urltmp=$urltmp."imatge.gif";
break;
case $mimetypes[3]:
$img = imagecreatefrompng($tmp_name);
$urltmp=$urltmp."imatge.png";
break;
}
define("NAMETHUMB", $urltmp); //y te olvidas de los problemas de permisos
...

todo lo demás igual. De esta manera crea en el directorio "C:\xampp\tmp" un fichero llamado imatge.xxx el cual puede manipular (leer/escribir/borrar). De esta manera me ha funcionado bien.
Previamente hay que darle permisos de escritura a esta carpeta, es decir, botón derecho sobre ella, propiedades, seguridad, editar y elegir el usuario TODOS (si no está hay que añadirlo) y darle control total.

Espero que este comentario pueda aportar algo.

PARA LOS PARCEROS QUE TIENE ESTE PROBLEMA

Fatal error: Call to undefined function: imagecreatefromjpeg() in /home/webcindario/vision-digital/thumbs/blob.php on line 35

LO QUE DEBEN HACER ES REINSTALAR EL SISTEMA DE SU SERVIDOR POR UNO MAS ACTUALIZADO SI ES POSIBLE DEBIDO A QUE PROBABLEMENTE ESTE CORRUPTA ALGUNA DIRECCION CON RESPECTO AL COMANDO DE LA EXTENSION GD2.

YO USO WAMP Y LO QUE HICE FUE REINSTALARLO Y YA!!! SOLUCIONADO

En mi pc funciona muy bien pero cuando lo elevo a mi servidor web( en linux) La imagen se guarda en la base de datos pero me sale el siguiente mensaje:
Warning: imagejpeg() [function.imagejpeg]: Unable to open '/home/midominio/public_html/temp/thumbtemp' for writing: Is a directory in /home/midominio/public_html/blob.php on line 65
Fotos guardadas
Cofirme:
Los datos se guardan en la base de datos.
Cree en el servidor las carpetas: temp/thumbtemp
Le deje todo los privilegios a la carpeta de escritura.
¿Que hago con el dichoso mensaje?

Un saludo

Para quien se tan amable de colaborarme con lo siguiente: creé un archivo en php y pues ya cree tambien la base de datos, y en este mismo archivo digite las dos partes del archivo. al ejecutar el codigo, me aparece el siguiente error:
Parse error: syntax error, unexpected T_VARIABLE in /home/webcindario/d/e/demisgar/Untitled-5.php on line 11

que corresponde a la siguiente linea en el archivo:
$postback = (isset($_POST["enviar"])) ? true : false;

Como lo puedo solucionar??????
Envio un saludo muy especial a toda las personas que aportan sus conocimientos.

Emily

Ok excelente script me fue de gran ayuda.. gracias .. ojala todos compartieran estos detalles que son de mucha utilidad ...te felicito.

Hola

Muy cordialmente me dirijo a ustedes, para solicitar colaboracion porfa porfa

Un saludo

Para quien se tan amable de colaborarme con lo siguiente: creé un archivo en php y pues ya cree tambien la base de datos, y en este mismo archivo digite las dos partes del archivo. al ejecutar el codigo, me aparece el siguiente error:
Parse error: syntax error, unexpected T_VARIABLE in /home/webcindario/d/e/demisgar/Untitled-5.php on line 11

que corresponde a la siguiente linea en el archivo:
$postback = (isset($_POST[”enviar”])) ? true : false;

Como lo puedo solucionar??????
Envio un saludo muy especial a toda las personas que aportan sus conocimientos.

oye tengo un problemo!
me carga esta direccion cuando carga la imagen: "http://localhost/prueba/%3C?php%20echo%20$_SERVER[%27PHP_SELF%27];%20?%3E"

y me da este mensaje:

Not Found

The requested URL /prueba/< was not found on this server.
Apache/2.2.11 (Debian) PHP/5.2.9-2 with Suhosin-Patch Server at localhost Port 80

ayuda xfa, me parece ke tengo un problema de capa 8 xD

me da la impresion de ke no tengo bien configurado apache2.

Agradecere toda la ayuda que me puedan dar

El script me ha servido demasiado, ya consigo almacenar imagenes y recuperarlas desde la base de datos, pero aun tengo un problema, resulta que algunas imagenes se almacenan completas y otras solo la parte superior, no se si esto se deba a la variable ALTURA definida por defecto con valor de 100, o el error tenga origen en otra cosa.
Ya he modificado ALTURA y algunas siguen cargando incompletas.

Agradeceria enormente que me pudieran dar alguna idea y asi solucionar dicho inconveniente lo más pronto posible.

Lo que no quiero es modificar el tipo de campo a mediumblob sino que la imagen pueda renderizarse y ocupe como maximo los 63k que permite el blob.

Alguien podria ayudar, lo he intentado todo pero siempre me salen estas lineas .Gracias por todo

Warning: imagejpeg() [function.imagejpeg]: Unable to open '/tmp/thumbtemp' for writing: No such file or directory in H:\wamp\www\wedprueba\untitled.php on line 67

Warning: fopen(/tmp/thumbtemp) [function.fopen]: failed to open stream: No such file or directory in H:\wamp\www\wedprueba\untitled.php on line 83

Warning: filesize() [function.filesize]: stat failed for /tmp/thumbtemp in H:\wamp\www\wedprueba\untitled.php on line 84

Warning: fread(): supplied argument is not a valid stream resource in H:\wamp\www\wedprueba\untitled.php on line 84

Warning: fclose(): supplied argument is not a valid stream resource in H:\wamp\www\wedprueba\untitled.php on line 86
Fotos guardadas

es excelente gracias me ayudo mucho

Lo probé y me funcionó a la perfección solo un detalle que no me guardaba el thumbnail, de la imagen pero he creado una carpeta en C:/xampp/htdocs/thumtemp porq alli si tengo permisos. y funcionó excelentemente.

🙂

Hola no se que estoy haciendo mal pero pongo el codigo y me dice el navegador que:
El sitio web rechazó mostrar esta página web
HTTP 403
Causas más probables:
Este sitio web requiere un inicio de sesión en él.

Utilizo HEIDIsql y no tengo ninguna contraseña puesta asi que estoy perdido, ¿alguien puede ayudarme? Gracias x adelantado

gracias broo por este ejemplo, lo implemente y me resulto muy bien, si me guarda la imagen en mi base de datos.
una vez mas muchas gracias....

Este codigo funciona bastante bien con imagenes menores o iguales 1024 x 768, pero no entiendo por que no funciona en imagenes superiores o iguales a 2048 x 1536. No es el peso / medida de archivo, es el tamaño de la imagen el problema.

He realizado un montos de pruebas y al poner mensajes en las diferentes lineas del codigo, se queda o aborta en la sentencia $thumb = imagecreatetruecolor($ancho, ALTURA);

No obtengo ningun error pero hasta antes de esta linea avanza el codigo.

Tengo la misma version de libreria GD instalada. Repito funciona muy bien pero solo hasta 1024 x 768 y le tengo configurado hasta 2 Mb de peso. Alguna idea del porque este extraño error.

AQUI LA SOLUCION.

En mi caso Centos no me funciona por defecto el limite maximo indicado en el php.ini
-----

Este error se produce cuando un script PHP excede el límite de memoria definido por defecto, que son 8 MB. Se soluciona de una forma muy sencilla.

Para cambiar el tamaño máximo del límite de memoria para un script en concreto es suficiente con añadir la siguiente línea al comienzo del script:

Con la línea anterior cambiaríamos el límite a 20 MB de memoria. Si no fuera suficiente, puedes ir aumentando el número de megas hasta que el script funcione.

Se puede conseguir que este cambio sea permanente para todos los scripts PHP que se ejecuten en el servidor añadiendo la siguiente línea al archivo php.ini del servidor:

memory_limit = 20 MB.

Yo he necesitado cambiar los límites de memoria simplemente para trabajar con imágenes (crear las miniaturas, etc.).

http://www.davidbayon.net/index.php?mostrar=posts&post_id=65

Amigo tu script me funcionó de maravilla, de verdad felicitaciones, solo tengo una duda que no he podido resolver, como defino el ancho.

En el script esta definido la altura pero que le tengo que agregar para definir el ancho y hacer el thumbnail a mi gusto?

Gracias y espero tu respuesta...

PD: Felicitaciones....

Ya resolví el problema, fue muy sencillo, lo que hice fue definir el ancho tal cual como lo hiciste con la altura, luego sustituí y logre lo deseado. Gracias...

Pensando me surgió otra pregunta, no te parece que guardando todas las imágenes vas a cargar mucho mysql? No sería mejor guardarlo en una carpeta para así liberar espacio en mysql? De ser así como se modificaría el script?

díganme como puedo guardar una foto en mi bd usando netbeans?
estoy haciedo un registro el cual m pide q inserte el nombre, apellidos, DNI, tbn tengo un 3 botones los cuales son agregar bd cancelar operacion, cargar imagen:
cargar imagen me envia a buscar la imagen que la tengo guardada en mi carpeta imagen, luego.
el boton agregar debera guardar el nombre, apellidos, dni y la foto en si en la bd, en el sgt from tengo lista en donde deberan aparecerme la lista de personas que e inscrito con con su respectiva foto para ellos e insertado un tabla en mi formulario y un boton ver. el cual me mostrara las personas ya isncritas

aquí les dejo el codigo del form registro

package carnet;
import java.sql.*;
import java.sql.Connection;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author oginf
*/
public class Registro extends javax.swing.JFrame {

/** Creates new form Registro */
public Registro() {
initComponents();

}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
//
private void initComponents() {

jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jTextField3 = new javax.swing.JTextField();
jComboBox1 = new javax.swing.JComboBox();
jComboBox2 = new javax.swing.JComboBox();
Cargar = new javax.swing.JButton();
jPanel3 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Registro");

jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Datos Personales:", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11));
jLabel1.setText("Nombre:");

jLabel2.setFont(new java.awt.Font("Tahoma", 1, 11));
jLabel2.setText("Apellidos:");

jLabel3.setFont(new java.awt.Font("Tahoma", 1, 11));
jLabel3.setText("Dni:");

jLabel4.setFont(new java.awt.Font("Tahoma", 1, 11));
jLabel4.setText("Cargo:");

jLabel5.setFont(new java.awt.Font("Tahoma", 1, 11));
jLabel5.setText("Oficina:");

jTextField2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField2ActionPerformed(evt);
}
});

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});

jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

Cargar.setFont(new java.awt.Font("Tahoma", 1, 11));
Cargar.setText("Cargar");
Cargar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
CargarActionPerformed(evt);
}
});

jPanel3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 116, Short.MAX_VALUE)
);

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jLabel3)
.addComponent(jLabel1)
.addComponent(jLabel4)
.addComponent(jLabel5))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, 223, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField2))
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(54, 54, 54)
.addComponent(Cargar))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(34, 34, 34)
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))))
.addContainerGap(27, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(jComboBox2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(Cargar)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Opciones:", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

jButton2.setFont(new java.awt.Font("Tahoma", 1, 11));
jButton2.setText("Agregar");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});

jButton3.setFont(new java.awt.Font("Tahoma", 1, 11));
jButton3.setText("Cancelar");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGap(72, 72, 72)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 80, Short.MAX_VALUE)
.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(105, 105, 105))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE)
.addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE))
.addContainerGap())
);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(33, Short.MAX_VALUE))
);

pack();
}//

private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void CargarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
// TODO add your handling code here:
m.Abrir_Dialogo(jPanel3);
} catch (Exception ex) {
Logger.getLogger(Registro.class.getName()).log(Level.SEVERE, null, ex);
}

}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jPanel3.removeAll();
jPanel3.repaint();
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Registro().setVisible(true);
}
});

try{
String cmd="select Nombre from personal";

}
catch(Exception ex){
System.out.println(ex.getMessage());
System.out.println(ex.toString());

}
}
metodo m=new metodo();

package carnet;
import java.sql.*;
import java.sql.Connection;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author oginf
*/
public class Registro extends javax.swing.JFrame {

/** Creates new form Registro */
public Registro() {
initComponents();

}

private void CargarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
// TODO add your handling code here:
m.Abrir_Dialogo(jPanel3);
} catch (Exception ex) {
Logger.getLogger(Registro.class.getName()).log(Level.SEVERE, null, ex);
}

}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
jPanel3.removeAll();
jPanel3.repaint();
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Registro().setVisible(true);
}
});

try{
String cmd="select Nombre from personal";

}
catch(Exception ex){
System.out.println(ex.getMessage());
System.out.println(ex.toString());

}
}
metodo m=new metodo();

no seria mas facil usar
copy($_files[tmp_name][name]&$_files[tmp_name][name]
bueno algo asi pero seria emjor usar eso a meterse al canibalismo en php

Soy nuevo en todo eso y me gustaría saber que pudo haber ocurrido con el proyecto, ya que estaba funcionando excelentemente hasta que me saltó un error 403 del servidor, que no tengo permiso o algo así, será que alguien me puede ayudar?

Estimados;

Funciona perfecto el codigo, muchas gracias...
pero tengo un pequeño problema con la imagen que se guarda en la bd no esta completa, que ocurrira?

Salu2

las imagenes no salen completas por que la variable donde se guardan son de tipo blob y esas variables solo permiten archivos que pesen como limite de 64 kb esto me paso = ami por eso use longblob o mediumblob que soportan archivos de mayor tamaño =P

Hola!!

Genial el ejemplo, me ha ayudado mucho. Muchísimas gracias por el aporte.
Me funciona perfectamente salvo que al mostrar la imagen (he utilizado tu siguiente artículo) me corta la imagen original. Es decir, al mostrar la imagen original sale cortada aunque el espacio está ahí porque si se muestran varias de las imágenes aparece un espacio entre ellas que parece que corresponde al real tamaño de éstas. La imagen en miniatura sale perfecta.

Algún consejo al respecto??

Estoy utilizando MACOSx

Muchísimas gracias de antemano.
Saludos

Ya lo he resuelto, simplemente definir el campo "foto" longblob en vez de blob

Saludos y muchas gracias por el script!!

Comments are closed.