Justi Lunes, 28 de Julio de 2008 a las 12.15
   Imprimir artículo
elWebmaster.com

Taller de PHP: Moviendo archivos

Taller de PHP: Moviendo archivosHola, bienvenidos al Taller de PHP. En la clase de hoy vamos a ver cómo subir archivos al servidor y algunos casos de uso. En realidad suena complicado pero es más sencillo de lo que parece. Hay varias cosas a tener en cuenta para ello, por ejemplo, si vamos a utilizar un formulario para subir los archivos.

Además hay que tener en claro el proceso que se llevará a cabo en el back-end, donde usaremos la función $_FILES, que nos permite trabajar mucho más específicamente con los archivos, agregar restricciones, etc. ¡Comencemos!

¿Cómo tiene que ser nuestro formulario?

A la hora de querer subir un archivo al servidor desde un formulario para poder agregar imágenes en una noticia, por ejemplo, tenemos que tener en cuenta algunos detallecitos.

El más importante de todos y el que casi todo el mundo se olvida es avisarle al formulario que se van a enviar archivos, para ello agregamos el siguiente parámetro en el tag de apertura del formulario: enctype=”multipart/form-data”.

Y luego sí, agregamos el input de tipo file para que se pueda enviar un archivo. El formulario básicamente quedaría así:

<form name="nueva-noticia" enctype="multipart/form-data" method="post" action="nueva_noticia.php">
<label>Título <br /><input type=”text” name=”titulo” value=”" /></label>
<label>Cuerpo <br /><textarea cols=”80″ rows=”10″ name=”cuerpo”></textarea></label>
<label>Imagen <br /><input type=”file” name=”imagen” value=”" /></label>
</form>

El Back-End

En nuestro back-end, o sea, en nuestro proceso por php para recibir el formulario, lo vamos a hacer exactamente igual que como lo veníamos haciendo con el resto de los formularios, vamos a recibir vía POST las variables titulo y cuerpo, pero no imagen.

Sí, ya sé que nuestro input se llama imagen, pero en este caso en lugar de recibirla como $_POST['imagen'], la vamos a recibir como $_FILES['imagen']. “¿Qué diferencia hay con POST?” se preguntarán y la respuesta es bastante sencilla, FILES nos da bastante más información respecto al archivo que subimos:

  • $_FILES['imagen']['tmp_name'] - nos da la ruta y el nombre temporal al archivo que acabamos de subir, si no queremos perder este archivo, lo que tenemos que hacer es moverlo a una carpeta nuestra dentro del hosting, por lo general no se tiene acceso a la carpeta temporal donde se suben los archivos.
  • $_FILES['imagen']['size'] - nos dice el tamaño que tiene el archivo, por si se realiza un servicio público y queremos limitar la subida solo a archivos de 1 mega, entonces se puede poner una condición utilizando este valor.
  • $_FILES['imagen']['type'] - nos va a indicar el tipo de archivo del que se trate, en nuestro ejemplo, como sólo queremos que se suban imágenes podemos poner un if limitando sólo al caso de las imágenes.
  • $_FILES['imagen']['name'] - nos va a indicar el nombre del archivo original, ya que el tmp_name es un nombre generado por el servidor.

Entonces ya sabiendo cómo leer el archivo que acabamos de enviar desde el formulario, solo nos resta moverlo a la carpeta de destino.

Supongamos que nosotros en el servidor tenemos la carpeta uploads donde vamos a guardar todas las imágenes de las noticias, lo que tenemos que hacer es poner la url absoluta a esa carpeta.

Fíjense que no es desde donde están todos nuestros scripts de php, sino que va a ser algo del estilo /var/www/elwebmaster.com/htdocs/uploads, y si están en Windows probablemente sea algo así: c:/archivos de programa/xampp/www/elwebmaster.com/uploads. Si ustedes tienen un servicio de hosting contratado, lo más probable que les hayan enviado un email con la información a su carpeta absoluta en el servidor, ya que ustedes si ingresan por ftp, van a entrar directamente a la carpeta a donde incluyen sus scripts, pero en realidad esta tiene un raíz en otro lado.

Si no tienen el email, y no tienen ni idea como es la url absoluta en donde están parados, pueden generar un error de php a propósito, y el mismo error les va a decir dónde se encuentran, por ejemplo, si en sus script ponen:

<? sadfasdf ?>

Les va a aparecer el siguiente error:

Parse error: syntax error, unexpected T_STRING in /var/www/elwebmaster.com/www/index.php on line 5

Eso quiere decir que nuestra url absoluta es /var/www/elwebmaster.com/www/

Bueno, ya tenemos nuestro archivo, ya conocemos nuestra url absoluta y ya tenemos nuestra carpeta donde queremos mover, lo que vamos a hacer es usar la función de php move_uploaded_file(), que va a mover un archivo recién subido a una nueva ubicación:

<?
$destino = ‘/var/www/elwebmaster.com/www/uploads’;
$origen = $_FILES['imagen']['tmp_name'];
move_uploaded_file( $origen, $destino );
?>

¿Sencillito, no? La semana que viene vamos a ver como recibir imágenes grandotas y convertirlas en imágenes más pequeñas para que se adapten a nuestro sitio.

¡Saludos!

<< CLASE ANTERIOR  

CLASE SIGUIENTE >>

Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (8)

  1. nicolas dice:

    hola se que esta pregunta no es referida al tema, pero quisiera que la consideres para una proxima clase de “respuestas a las preguntas”, mi duda es como hacer lo que en esta pagina se puede presenciar a la derecha, donde uno cuando clickea en “Curso php”, la columna se agranda hacia abajo y aparecen los cursos, tengo una idea gral que puede ser con CAPAS, pero no se me ocurre como, si quieres puedes fijarte en un sitio que hice — http://organizacionmichetti.com/presupu.php — que he trabajado con capas, pero no logro mover las demas hacia abajo, si pudieras ayudarme o explicar te lo agradeceria mucho. Por cierto, muy buen trabajo el tuyo, cabe destacar que gracias a vos, pude aprender y a hacer muchas cosas, nuevamente te doy un GRACIAS!

  2. harry dice:

    Buenas muy bueno esto de las clases jeje… podrias poner algo mas de información referente a las sesiones y a los cookies? por ejemplo explicar como mantener un valor para usarlo mas tarde en una sesion.

    un saludo

  3. César Cancino dice:

    Hola Nicolás, ese mené de la Página que muestras está programado con otro tipo de tecnología, específicamente con JavaScript, se utiliza un script basado en una función que te permite mostrar u ocultar tablas…

  4. Luis dice:

    hola a todos-…
    tengo un problema al momento de mover el archivo al servidor me sale el siguiente error… me podrian ayudar…… gracias
    El error es:
    Warning: move_uploaded_file(c:/xampp/htdocs/xampp/Curso_php/uploads) [function.move-uploaded-file]: failed to open stream: Permission denied in C:\xampp\htdocs\xampp\Curso_php\new-uploads.php on line 4

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move ‘C:\xampp\tmp\php69.tmp’ to ‘c:/xampp/htdocs/xampp/Curso_php/uploads’ in C:\xampp\htdocs\xampp\Curso_php\new-uploads.php on line 4

    no se que hacer ……
    gracias

  5. HurryCrack dice:

    Con respecto a los warnings que esta teniendo el amigo Luis quiero comentarle
    que seguramente sean por los permisos que tiene en esta carpeta y en estos archivos.
    Pon los como lectura escritura y listo. Chau.

  6. Justi dice:

    tal cual lo que dijo HurryCrack, es muy probable que sea por los permisos sobre el archivo o la carpeta, lo unico extraño que por las URL que tira es windows donde esta corriendo xampp y ahi no deberia tener problemas de permiso.

    Igual el error es claro de que no esta teniendo permisos jeje “Permission denied”

  7. Edison dice:

    Justi tengo el mismo problema de Luis yo uso el xampp en windows xp y la carpeta c:/xampp/htdocs/xampp/proyejemplos/imagenes y alli ya le e cambiado los permisos a la carpeta en windows pero nada ,sigue saliendo ese error, no habra alguna manera de configurar en el archivo de configuracion del Apache poner digamos ”chmod 777 c:/xampp/htdocs/” para que tenga los permisos, si puedes poner la solucion de una manera mas detallada (la ruta y el codigo)para poder hacerlo y ya no salga ese error.

    De ante mano mucgas gracias.

  8. kyo_ram dice:

    yo tengo un problema con php, lo estoy corriendo en un servidor windows server 2008.
    el problema es que no tengo acceso a el dierectorio temporal. windows no le deja a php hacerlo.
    me regresa un error de permiso denegado.

    existe algun parametro para evitar subir el archivo al directorio temporal y subirlo directamente al directorio destino? Muchas gracias.

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Iniciar Sesión