Upload de archivos > 2Mb (PHP)

Subir archivos a un servidos es una de las tareas más comunes en el desarrollo de aplicaciones con PHP del cual hemos comentado en Upload de Archivos con PHP, normalmente los archivos que suben son como máximo 2Mb. Pero hay problemas cuando se quieren subir archivos de mayor tamaño, para ello veremos algunos métodos para resolver este inconveniente.

Que debemos configurar
El archivo php.ini contiene los parámetros de configuración de PHP, entre ellas los parámetros relacionados para subir archivos, estas propiedades son:

  • post_max_size: tamaño máximo de datos enviados por POST.
  • upload_max_filesize: tamaño máximo para subir archivos.
  • max_execution_time: tiempo máximo de ejecución de cada script en segundos.
  • max_input_time: tiempo máximo para analizar la petición de datos.

Primer Método: Configurando php.ini
La primera forma para habilitar el upload de archivos grandes es editar el archivo php.ini. Entonces, abrimos el archivo php.ini y cambiamos los parámetros deseados, en nuestro caso habilitamos un máximo de 100 Mb de tamaño a subir y un tiempo máximo de 1000 segundos:
[code]
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 1000
max_input_time = 1000
[/code]
[code]
; Maximum size of POST data that PHP will accept.
post_max_size = 100M
[/code]
[code]
; Maximum allowed size for uploaded files.
upload_max_filesize = 100M
[/code]

Segundo Método: Configurando .htaccess
La segunda forma de cambiar la configuración es con la ayuda del archivo .htaccess, para ello creas un archivo llamado .htaccess en la raiz de tu servidor web, luego dentro de este archivo colocas lo siguiente:

[code]
php_value upload_max_filesize 100M
php_value post_max_size 100M
php_value max_execution_time 1000
php_value max_input_time 1000
[/code]

Tercer Método: Configurando en el script php
La tercera forma es cambiar los parámetros de configuración directamente en nuestro script php, para ello haremos uso de la función ini_set que permite sobrescribir la configuración general, entonces al inicio de nuestro script que se encargará de procesar los archivos subidos colocamos:

[php]

[/php]

A mi parecer la segunda forma es la mas practica pues solo creamos un archivo y con ello habilitamos la opción de upload para archivos grandes, además en todos los hosting comerciales es posible crear el archivo .htaccess.

Comentarios Total 28 comentarios


javouy
Publicado: 22/03/2008 9:56 am

tengo este sitio en Strato, tengo q habilitar la carga de archivos de mas de 2 mb, no tengo acceso al php.ini y entonces puse el htaccess bajo la carpeta /httpdocs: no funciono.
Puse el archivo htaccess tambien en la carpeta donde se realizara la carga: tampoco funciono. TE agradezco avisarme si es un tema del htaccess que no funciona siempre o esta mal ubicado.

glahuka
Publicado: 18/04/2008 6:38 am

hola,

he de subir archivos de más de 2M a un servidor con php.ini compartido… he puesto el código con ini_set directamente en el archivo que gestiona la subida de ficheros.

ini_set(‘post_max_size’,’100M’);
ini_set(‘upload_max_filesize’,’100M’);
ini_set(‘max_execution_time’,’1000′); ini_set(‘max_input_time’,’1000′);

pero al hacer un phpinfo(); solo me cambia el max_executyion_time en la configuración local.
Por qué puede ser esto? que cambie unas variables si y otras no?
tengo que tocar mas argumentos de php.ini para poder subir archivos a parte de los que se especifican aquí?

Gracias!

Marco
Publicado: 22/04/2008 6:18 pm

A mi no me funciono en un hosting debido a que este tenia instaladp el Apache como CGI y no como modulo, por lo que cree un archivo php.ini y le puse lo siguiente :

upload_max_filesize = 100M
post_max_size = 100M
max_execution_time 1000
max_input_time 1000

Y listo! Ya puedo subir archivos de hasta 100 megas!!!

Saludos.

jorge.hoya
Publicado: 28/04/2008 1:14 pm

Hola,

en su momento me encontré con el mismo problema, el volcado de una copia de seguridad de una base de datos almacenada en un fichero de gran tamaño. Cierto es que no recuerdo como lo solventé, creo que me pude conectar a la consola del sistema, pero buscando buscando encontré BigDump [1] que a lo mejor es puede eyudar. Ciao :-)

[1] http://www.ozerov.de/bigdump.php

Ambro
Publicado: 02/06/2008 11:57 pm

Hola !!! en segunda forma me sale un error de 500 Internal Server Error, soy novato en esto y no encuentro mi php.ini donde sopuestamente deberia estar…. gracias

kaede
Publicado: 05/07/2008 3:59 pm

yo logre activarlo poniendo este mismo código pero en mi archivo .htacces

Andres
Publicado: 08/07/2008 9:07 am

HOla, quise usar la opcion del htaccess y no me funciona.
Solo es crear el archivo con esas 4 lineas o es necesrio tags extra ?

Saludos

kid-power
Publicado: 08/09/2008 8:22 am

hola¡
quiesiera saber como descargar esos mismos archivos.

Julian
Publicado: 08/10/2008 11:01 pm

El archivo .htaccess se encuentra en el hosting…… se puede bajar para editarlo con un bloc de notas y volverlo a subir.

el .htaccess no me funciono local, pero en el hosting perfectamente

franz
Publicado: 19/12/2008 4:19 pm

holasss
¿Cuál es el tamaño máximo de un archivo script de SQL Server 2008 ?

ojala puedan ayudarme con esa duda q tengo gracias

semgm
Publicado: 19/01/2009 7:33 pm

Muchas gracias!!!
Me funciono con el primer método.
Me podrías decir cual es la cantidad recomendada para subir archivos?

Nuevamente gracias

David Vega
Publicado: 04/04/2009 3:57 pm

Gracias! Era lo que buscaba.

CARLUISDYNHO
Publicado: 09/06/2009 12:34 pm

Hola! Sin ofender Unijimpe pero no seria muy bueno que publiques esto! y en PHP wa, Bueno te explico Algun hakers envidiosos piratas de la red como DR.MILITAN – FREESTILE Te suben Archivos al Host Archivos que pueden modificar tu host y Ademas agregar uno de sus index codificados Relentisarlo etc… Bueno he tenido experiencia con esto y no c tu no es Bueno para Host q tengan redireccion o sin proteccion nomas es un comentario no lo tomes a mal.

Neko
Publicado: 20/08/2009 1:57 pm

hola, ninguna de las 3 formas me resulta, solo tengo localhost y he modificado todo…. como veo la capacidad maxima de mysql?… o me recomiendan k formatee la maquina para volver a probar?

stef
Publicado: 12/10/2009 6:26 pm

hola quiero subir un archivo que sea mas de 2MB pero quiero el codigooooooooooooooo por fas ok???????

bay bay¡¡¡

saludos a los informaticos

WILSON
Publicado: 23/10/2009 3:05 pm

ME FUNCIONO MUY BIEN EL PRIMERO.. GRACIAS

gabriel b
Publicado: 18/01/2010 8:13 am

exelente tutorial funciona perfecto, gracias por la info, php y sus seguidores son una maravilla.

Alan
Publicado: 25/01/2010 12:55 pm

Sabes he realizado todas las sugerencias que has dado y no me funciona ninguna , asi como tambien he modificado el archivo php.ini (aunque me aparecen 2 en el directorio php del appserv , que es el que tengo instalado) esos 2 que te digo que aparecen uno sale como PHP.ini el cuale s un archivo INI-DIST y el otro es PHP el cual es INI RECOMENDED SIN EMABRGO LOS HE MODIFICADO EN LOS 2 ARCHIVOS Y SIGO SIN EXITO al tratar de subir archivos mayores de 2M y no entiendo pk!! si he ehecho too loque dicen y lo que se dice en los otros foross!!! mira este es el script pequeño para cargar el archivo :

/*
ini_set(‘post_max_size’,’100M’); // Tamaño máximo de datos enviados por método POST.
ini_set(‘upload_max_filesize’,’100M’); // Tamaño máximo para subir archivos al servidor.
ini_set(‘max_execution_time’,’1000′); // Tiempo máximo de ejecución de éste script en segundos.
ini_set(‘max_input_time’,’1000′); /*Tiempo máximo en segundos que el script puede usar
para analizar los datos input, sean post,get o archivos.
ini_set(“memory_limit” , “30M”) ; /*Tamaño máximo que el script puede usar de la memoria, mientras se ejecuta.
set_time_limit(45);
*/

if (is_uploaded_file($_FILES[‘userfile’][‘tmp_name’])) {
$destino = ‘C:/AppServ/www/Itransfer/archivos/’.$_FILES[“userfile”][“name”];

if(copy($_FILES[‘userfile’][‘tmp_name’], $destino)){
echo “se movio el archivo correctamente”;
}else{
echo “Error al mover el archivo.”;
}

} else {
echo “Archivo no subido: ” . $_FILES[‘userfile’][‘name’];
}
/* …or… */
$nombre_archivo=$_FILES[‘userfile’][‘name’];
//echo $nombre_archivo;
$ruta=’C:/AppServ/www/Itransfer/archivos/’.$nombre_archivo;
move_uploaded_file($_FILES[‘userfile’][‘name’], $ruta);

?>

ESPERO ME AYUDEN PK ESTOY URGIDISMO CON QUE ME RESULTE ESO!!!

MUCHAS GRACIAS!!

Disruption
Publicado: 16/02/2010 7:23 am

@Alan

Los archivos que comentas son plantillas de php.ini
Lo que tienes que hacer es cambiar el nombre a uno de los dos para que se llame solamente php.ini y ya está.

Espero que tengas suerte,
Disruption.

Juan
Publicado: 28/04/2010 2:53 pm

Bien, eso de subir ya está hecho, pero ahora como configuro el servidor para que me permita descargar archivo de más de 2MB.

Gracias por su ayuda.

edicsonb
Publicado: 15/09/2010 1:24 pm

Cuando el Hosting esta bloquedo nada de eso funciona.

sistemas
Publicado: 14/04/2011 1:51 pm

Me pueden ayudar con el codigo de subir upload

Raul
Publicado: 31/10/2011 1:04 pm

Muchas gracias, ahora ya puedo subir tranquilamente los archivos. Pero tengo una duda, solamente en el IE respetaba el tamaño maximo de subida de 2M y en los otros navegadores no (firefox 7, chrome, safari). Alguien sabe por que esto?

Andres
Publicado: 07/11/2011 9:15 pm

Muchas Gracias esta muy bueno el post
me funco al max el primer metodo…

mp3letras.com
Publicado: 26/02/2012 10:18 pm

muchas gracias amigo ya andaba yo preguntando como podía hacer eso pero ya encontré como solo tienes que agregar esto a tu .htaccess tiene que quedar de la forma que les presento abajo fue la única que me funciono…saludo desde http://www.mp3letras.com

#set max upload file size
php_value upload_max_filesize 20M

#set max post size
php_value post_max_size 20M

# Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase /

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Danny Neira
Publicado: 21/03/2012 5:38 pm

Muchas gracias amigo!!!!

ha sido muy útil tu aporte.

Eduar
Publicado: 14/07/2014 10:28 am

¿Para Linux es igual… ? por que uso el primer método y no me funciona.

Fernando
Publicado: 18/03/2015 7:09 am

Hola gente el post es viejo pero busncado llegue a este.

Tengo un terrible problema, directamente no suben los archivos. No se guardan en ningun lado. Al crear el Incidente no me genera ningun error!

Tienen idea de porque puede estar pasando ?

Gracias…

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)