PDA

Ver la Versión Completa : Envio De Imagenes


CARLOS E
20-05-2006, 03:05:29
Hola, tengo la siguiente duda:
TRABAJO CON PHP EN LA VERSION 4.4
necesito almacenar en mi base de datos en mysql las imagenes que me sean enviadas desde la pagina del cliente, para esto hice unas paginas de Prueba, una donde se carga la imagen "guardar.php" y otra donde muestra el resultado de la carga "resul_img.php" con en siguente codigo:

guardar.php

<html>
<body>
<form ENCTYPE="multipart/form-data" action="resul_img.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000000">
<INPUT NAME="userfile" TYPE="file">
<p><input type="submit" value="Enviar">
</form>
</body>
</html>


resul_img.php
<html>
<body>
<?
$link=mysql_connect("localhost","root","");
mysql_select_db("bdregistros",$link);
echo "<BR>".$userfile; //nombre del archivo de la imagen temporal
echo "<BR>".$userfile_name; //nombre del archivo
echo "<BR>".$userfile_size; //tamaño
echo "<BR>".$userfile_type; //tipo
if ( $userfile!="none" && $userfile!="")
{
if ($userfile_type=="image/jpeg" || $userfile_type=="image/pjpeg" || $userfile_type=="image/gif" || $userfile_type=="image/bmp")
{
$info=getimagesize($userfile);
echo "<BR>".$info[0]; //anchura
echo "<BR>".$info[1]; //altura
echo "<BR>".$info[2]; //1-GIF, 2-JPG, 3-PNG
echo "<BR>".$info[3]; //cadena de texto para el tag <img
$x=addslashes(fread(fopen($userfile,"r"),filesize($userfile)));
$result=mysql_query("INSERT INTO imagenes (id_img,anchura,altura,tipo,imagen) VALUES ('0'".$info[0].",".$info[1].",'$userfile_type','$x')",$link);
$id=mysql_insert_id();
echo "Imagen agregada con el id ".$id."<BR>";
}else{
$error="El tipo de archivo tienes que ser JPG, GIF o BMP.";
}
}else{
$error="No ha seleccionado ninguna imagen...";
echo $error;
}
mysql_close($link);
if ($error!="")
{
echo "</center><P><font face='Arial' size=2 color='#ff0000'> Error: ".$error."</font><br>";
}
?>
</body>
</html>


Este codigo lo he copiado y adaptado a mi base de datos.

Me indica en la pagina de resultado que no he seleccionado ninguna imagen.

:confused: ¿A que podria deberse que ni siquiera me imprime los valores de la variables $userfile_xxx ?. por que no se pasan los atributos de "userfile" desde la pagina guardar.php?

:confused: ¿Es correcto que el campo de la tabla donde guardo la imagen sea de tipo longblob?


Agradeceria su respuesta pues soy nuevo en esto...

dec
20-05-2006, 06:10:35
Hola,


:confused: ¿A que podria deberse que ni siquiera me imprime los valores de la variables $userfile_xxx ?. por que no se pasan los atributos de "userfile" desde la pagina guardar.php?


Ayer o anteayer tuve que repasar el Manual de manejo de envío de archivos con PHP (http://es2.php.net/manual/es/features.file-upload.php). Creo que en ese documento tienes la solución a tu problema, al menos para lo que toca a que no recibas información en las variables "$userfile_xxx".

Es posible que la directiva "register globals" de PHP esté desactivada y por eso no puedas acceder a esas variables, o, por mejor decir, esas variables no contienen la información que precisas.

En su lugar, según el manual hay que utilizar el "Array global" "$_FILES". Porque además tienes que tener en cuenta que la directiva "register globals" no se recomienda que esté activada.

Yo creo que echando un vistazo al documento susomentado no tendrás problemas para continuar adelante. Fíjate en el uso de la función "is_uploaded_file", que puede serte de utilidad en estos casos.

Yo te pongo aquí un poco de código de unas pruebas que hize ayer o anteayer, pero, no dejes de revisar este ejemplo que te propone el manual, y observa cómo puede averiguarse, con la función "is_uploaded_file", un posible intento de "entrada maliciosa" en nuestro sitio Web.


/* In PHP 4.1.0 or later, $_FILES should be used instead of $HTTP_POST_FILES.
*/
if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name']))
{
copy($HTTP_POST_FILES['userfile']['tmp_name'], "/place/to/put/uploaded/file");
}
else
{
echo "Possible file upload attack. Filename: " . $HTTP_POST_FILES['userfile']['name'];
}


A continuación mi aportación de código, recogido de las pruebas de ayer o anteayer y adaptado ("userfile") al formulario que tratas de utilizar, y que por cierto no parece ser el problema, dicho sea de paso:


if (@is_uploaded_file($_FILES['userfile']['tmp_name']))
{
$nombre = $_FILES['userfile']['name'];
$tipo = $_FILES['userfile']['type'];
$tamano = $_FILES['userfile']['size'];
$rutatmp = $_FILES['userfile']['tmp_name'];

/* En este caso recuperamos el contenido del archivo
por supuesto que aquí tú podrías hacer con el archivo
lo que te fuera oportuno, no sólo leer su contenido
*/
$contenido = file_get_contents($rutatmp);

/* Y acto seguido lo borramos, si damos con él
*/
if(file_exists($rutatmp)) unlink($rutatmp);
}


Bueno. Creo que ya es bastante, y hasta demasiado, a ver si puedes solucionar el problema de la subida de archivos. Por otro lado... respecto del campo "LongBlob" en la base de datos, para albergar imágenes, lo cierto es que no pasé del campo "Blob" nunca, y no tengo experiencia en estos temas.

No sé si incluso sería mejor almacenar los archivos de imagen en el disco duro y no en una base de datos, pero, en todo caso, aquí te dejo un enlace en donde se trata lo que tratas tú de llevar a cabo: subir, guardar y mostrar imágenes con PHP y MySQL.

- Mostrar una imagen desde un campo "blob" (http://www.buayacorp.com/archivos/mostrar-una-imagen-desde-blob-mysql-usando-php/)
- Guardar una imagen en una base de datos (http://www.buayacorp.com/archivos/guardar-una-imagen-y-su-miniatura-a-un-campo-blob-de-mysql/)

Ya dirás qué tal te fue con el tema. ;)

CARLOS E
23-05-2006, 05:22:03
Problema Solucionado !! :rolleyes: Muy buena la explicacion...

Muchas graciass!!!