Antes de comenzar con el código, veremos algunas cuestiones de la configuración relacionada con este tema en el archivo php.ini. Dentro de este archivo, existe una sección llamada "File Uploads". A continuación les muestro el contenido de esta sección en mi archivo php.ini (esta con los valores por defecto, con los que se instala para Ubuntu 8.10)
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
Como puedes notar, la primera opción (file_uploads = On) es realmente importante, ya que si le cambiamos el valor por "Off" imaginaras lo que pasa ....SI, se deshabilita la subida de archivos!!.
La segunda ("upload_tmp_dir") esta comentada, y podemos dejarla así, ya que de esta manera se usara el directorio del sistema por defecto para subir los archivos en forma temporal, esto es debido a que el archivo primero se sube a un directorio temporal y luego lo podemos mover a algún otro lado, si es que nos interesa guardarlo de forma permanente (ya veremos como se hace esto).
La tercera opción, nos permite especificar el tamaño máximo del archivo que podremos subir al servidor (en este caso 2 Megas).
Existe una cuarta opción muy ligada con la tercera, que se llama "post_max_size" e indica el tamaño máximo de datos enviados por POST que aceptará PHP; con lo cual, por mas que pongamos que "upload_max_filesize" sea de 100M, si "post_max_size" es menor que esto, no podremos enviar un archivo de 100M, ya que "post_max_size" tiene prioridad. Esta opción se encuentra en la sección "Data Handling" del archivo php.ini, y en mi caso el valor por defecto es de 8M.
;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
......
......
; Maximum size of POST data that PHP will accept.
post_max_size = 8M
......
......
Importante: Para que los cambios que realices en el archivo php.ini tengan efecto, debes reiniciar el servidor web (con Apache sobre Ubuntu 8.10
Dicho todo esto, es hora de comenzar con el código. Lo primero será crear un simple formulario HTML que nos permita seleccionar el archivo y enviarlo al servidor.
Código del archivo "prueba.html"
<form method="POST" action="subir_archivo.php" enctype="multipart/form-data">
<input type="file" name="archivo">
<input type="submit" value="Subir archivo">
</form>
En este formulario (y cualquiera que hagas para enviar archivos) debes tener en cuenta dos cosas principales: el

Código del archivo "subir_archivo.php"
<?php
//Obtengo la ruta completa (con el nombre incluido) del archivo subido
$ruta_archivo_a_subir = $_FILES['archivo']['tmp_name'];
/*Armo la ruta completa (con el nombre incluido) de
donde quiero guardar el archivo en forma permanente*/
$ruta_destino = 'archivos_subidos/' . $_FILES['archivo']['name'];
//Si el archivo se subio correctamente, lo muevo a la ubicacion permanente
if( move_uploaded_file($ruta_archivo_a_subir, $ruta_destino) )
echo 'El archivo se ha subido exitosamente';
else
echo 'Ha ocurrido un problema al cargar el archivo';
?>
Este pequeño código, nos da una idea de como funciona la subida de archivos. Como vemos existe un array llamado $_FILES (que es superglobal). En $_FILES tendremos la información relacionada con los archivos que se subieron (en nuestro caso subimos un único archivo, pero podría haber mas). Dentro de $_FILES existe la siguiente información (
//Nombre original del archivo (sólo el nombre)Con esta información disponible, el código averigua donde fue subido el archivo en forma temporal
$_FILES['nombre_del_campo_file_del_form']['name']
//Ruta temporal del archivo (con el nombre)
$_FILES['nombre_del_campo_file_del_form']['tmp_name']
//Tipo de archivo
$_FILES['nombre_del_campo_file_del_form']['type']
//Tamaño del archivo en bytes
$_FILES['nombre_del_campo_file_del_form']['size']
//Codigo de error que se produjo al subir archivo (si no hubo error, es 0)
$_FILES['nombre_del_campo_file_del_form']['error']
Te aconsejo que hagas todo tipo de pruebas, como intentar subir archivos de mayor tamaño que lo especificado como máximo en el archivo php.ini; mostrar el tamaño del archivo que se subió; ver si hubo algún código de error al subir el archivo; modificar el código para subir dos o mas archivos y todo lo que se te ocurra. En otro post, veremos un poco mas sobre el manejo de errores relacionado con archivos, pero por el momento hasta aquí llegamos. Si haces alguna prueba, comentala así la vemos todos.
6 comments
exelente blog che, segui asi
Muchas gracias Pablo.
Saludos!
matsuita:
gracias el aporte me sirvio para empezar a subir imagenes en el sitio que necesitamos
gracias de ante mano
Gracias matsuita, es muy bueno saber que te ha servido este post. Espero poder seguir ayudándote en todo lo que este a mi alcance.
Un saludo!
Hola amigo pero en el cpanel donde encuentro esta obcion (php.ini) y gracias.
Hola, para saber donde se encuentra el archivo php.ini en tu equipo, escribe lo siguiente en una terminal:
php -i | grep php.ini
Espero te sea de utilidad.
Saludos!
Publicar un comentario