Nube

sábado, 19 de julio de 2008

Subir archivos de más de 2 megas en php

Antes que nada decir que aquí no voy a enseñar como subir archivos, sino como permitir subir archivos mayores de 2 megas centrándome únicamente en la configuración necesaria para poder hacerlo. Si andas buscando un script para subir archivos desde PHP "googlea" y encontrarás.

En PHP el tamaño máximo por defecto para subir archivos es de 2 megas.
Si deseamos aumentar el tamaño deberemos de cambiar la configuración de algunos parámetros.

¿Qué tengo que modificar?
El archivo php.ini contiene la configuración de PHP. En concreto los parámetros son:
  • post_max_size: tamaño máximo de los datos enviados por POST.
  • upload_max_filesize: tamaño máximo al subir archivos.
  • max_execution_time: tiempo máximo de ejecución de cada script en segundos.
  • max_input_time: tiempo máximo de sepera en la recepción de datos.

Voy a citar algunos métodos para modificar dichos parámetros.


1.-Configurar directamente el php.ini

Editando directamente los parámetros del archivo php.ini se soluciona el problema.

Vamos a poner de ejemplo 10 Mb como máximo al subir archivos y un tiempo de espera y ejecución de 15 minutos, es decir 900 segundos.

Buscamos los parámetros dentro del archivo.

;;;;;;;;;;;;;;;;;;;

; Resource Limits ;

;;;;;;;;;;;;;;;;;;;

max_execution_time = 900

max_input_time = 900

; Maximum size of POST data that PHP will accept.
post_max_size = 10M

; Maximum allowed size for uploaded files.
upload_max_filesize = 10M



2- Crear un archivo .htaccess

Otra forma es cambiar la configuración desde un archivo .htaccess. Crea el archivo y escribe el siguiente código :


php_value upload_max_filesize 100M

php_value post_max_size 100M

php_value max_execution_time 1000

php_value max_input_time 1000


Si no sabes crear un archivo .htaccess desde windows te dejo un tutorial de como hacerlo.

Ahora súbelo a la raíz de tu servidor y ya esta.


3.- Cambiar la configuración en tiempo de ejecución.

La forma más personalizada es mediante código PHP. Y digo que es la más personalizada porque te permite cambiar la configuración desde cualquier parte del código PHP. Utilizando la "función" ini_set.



ini_set('post_max_size','100M');
ini_set('upload_max_filesize','100M');
ini_set('max_execution_time','1000');
ini_set('max_input_time','1000');

// script de subir archivos
?>

9 comentarios:

miguel dijo...

hola soy miguel, muy interesante tu blog...soy programador php novidente, me encantaria contactar con algun otro programador php para llevar a cabo un nuevo proyecto de red social, el que este interesado que me escriba a mi mail o que me agregue a su msn: msn(arroba)taoru.com.ar

Gustavo dijo...

Este artículo me ha sido de mucha utilidad, llevaba rato buscando e intentando porque no sabia que era necesario modificar tambien post_max_size, me has salvado el dia :) Gracias!

Demiurgo dijo...

me alegra que os sirva de ayuda

Anónimo dijo...

Excelente pos aun despues de un año me sirve para modificar paramentros en moodle, no sabia que el tiempo tambien se modificaba ... ahora entiendo muchas cosas jejejeje. gracias

DavidV dijo...

En mi caso los valores en tiempo de ejecucion no cambian, la prueba q realizo es:
ini_set('post_max_size','100M');
ini_set('upload_max_filesize','100M');
ini_set('max_execution_time','1000');
ini_set('max_input_time','1000');

y con ini_get muestro el valor y siempre me trae el mismo que esta en el archivo php.ini
echo "".ini_get("post_max_size")."";

Demiurgo dijo...

DavidV tal vez no te permita utilizar la opción ini_set, te recomiendo probar con la creación del archivo .htaccess

Anónimo dijo...

Hola. Sabes como se hace para evitar que haya time out (o sea, que se corte la subida por superar una cantidad de tiempo determinada)?
gracias

Demiurgo dijo...

max_execution_time = 900

max_input_time = 900

pablo dijo...
Este comentario ha sido eliminado por un administrador del blog.