Subir archivos con PHP
Subir un archivo significa enviar un fichero desde el ordenador del usuario hasta el servidor donde se aloja nuestra página web. El procedimiento, visto por el usuario, es tan sencillo como seleccionar un fichero en un formulario y darle a enviar. En el otro lado, visto por el desarrollador, no es mucho más complicado. Vamos a ver cómo.
Lo primero es crear un formulario donde alojar el componente que nos permitirá seleccionar ficheros, un "input" de tipo "file".
<form method="post" action="upload.php" enctype="multipart/form-data">
¡Sube tu foto!: <input type="file" name="foto" /> <input type="submit" name="enviar" value="Enviar" />
</form>
MUY IMPORTANTE: El atributo enctype="multipart/form-data" tiene que estar siempre que queramos subir un fichero, de lo contrario no se subirá ningún archivo. Es bastante habitual olvidarse de este atributo y perder un valioso tiempo viendo qué pasa.
La parte HTML ya la tenemos lista, es un sencillo formulario con un campo para subir un fichero y un botón de envío. Como se puede observar, hemos indicado que los datos del formulario se envien al fichero "
upload.php". A continuación vamos a ver qué debería contener ese fichero.
<?php
move_uploaded_file($_FILES['foto']['tmp_name'],'imagenes/upload/'.$FILES['foto']['name']);
?>
Así de sencillo, solamente hay que usar la función move_uploaded_file indicándole cual es el fichero que se ha subido como primer parámetro, y la ruta donde queremos guardarlo como segundo parámetro. En este caso hemos subido el fichero que hemos enviado a través del campo con nombre "foto" y lo hemos guardado en "imagenes/upload/". Obviamente, hay que crear este directorio y darle permisos de escritura (777) para que PHP pueda almacenar el fichero.
En esta línea de código hay otra cosa muy importante para manejar las subidas de ficheros, el array $_FILES. Este array contiene información sobre los ficheros subidos y es el que usamos para obtener el nombre temporal con el que se ha subido el fichero y su nombre real para copiarlo en el directorio de destino.
El contenido de $_FILES es el siguiente:
- tmp_name: Es el nombre del fichero temporal donde se ha hecho el upload.
- name: Es el nombre original del fichero, el que le puso el usuario.
- type: El tipo mime del fichero. Por ejemplo si es una imagen jpeg el valor de esta clave será "image/jpeg"
- error: Indica si ha habido algún error durante la subida.
- size: Tamaño del fichero en bytes.
Por lo tanto lo que hemos hecho en el código anterior ha sido mover el fichero desde su ubicación temporal (tmp_name) hasta un directorio que nosotros hemos elegido (imagenes/upload) usando el nombre original del fichero (name).
Algunos servidores al subir un fichero automáticamente asignan unos permisos que impiden que se puedan ver desde la web, en este caso podemos usar la función chmod para cambiar los permisos a por ejemplo 644.
<?php
move_uploaded_file($_FILES['foto']['tmp_name'],'imagenes/upload/'.$FILES['foto']['name']);
chmod('imagenes/upload/'.$FILES['foto']['name'],0644);
?>
Más información sobre la subida de ficheros en la documentación oficial.
http://es2.php.net/manual/en/features.file-upload.post-method.php
Redactado por Nenillo