Permitir la carga de archivos grandes con PHP desde .htaccess

  • Por
Cómo permitir el upload de archivos de gran tamaño desde PHP, con .htaccess.
Algunos servidores web están configurados para permitir carga de archivos hasta un tamaño determinado, en concreto hasta 2 megas. Este es un tamaño de archivo razonable, pero quizás no sirva para tu caso y quieras incrementarlo. Esto es posible a través del archivo .htaccess.

La idea no es mía, sino que la he visto en un blog para programadores de PHP llamado PHP Archive. El artículo original, del que estoy haciendo una mera traducción está publicado bajo el nombre de: Uploading large (big) files in PHP using .htaccess

Esto es lo que tienes que hacer.

Primero, debes crear un archivo .htaccess en la raíz de tu directorio de publicación, si es que no lo tienes creado ya.

Referencia: Puedes conocer lo que es el archivo .htaccess en DesarrolloWeb.com, a través de la FAQ Qué es htaccess y los enlaces que encontrarás dentro.

A continuación debes editar el archivo .htaccess para colocar el siguiente código, salvando luego el fichero.

php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200
A partir de este momento deberías poder subir al servidor archivos de hasta 20 megas de tamaño, simplemente usando el campo file de los formularios HTML y utilizando la función PHP move_uploaded_file(), tal como hacías habitualmente. Consulta el artículo Subir archivos con PHP para encontrar más referencias a este proceso.

Del código que se debía colocar en el .htaccess, verás que hemos indicado 4 parámetros con distintos valores, que podrías configurar tú mismo según tus necesidades. El primer valor (php_value upload_max_filesize) es el tamaño máximo de los ficheros que deseas que se permita subir. El segundo valor (php_value post_max_size) es el tamaño máximo del post. El tercer dato (php_value max_execution_time) es el tiempo máximo que se permite que los scripts PHP tarden en ejecutarse. El último valor indicado (php_value max_input_time) wa wl riwmpo máximo en segundos que se permite a un script para procesar datos que reciba de entrada, como ficheros que se están subiendo al servidor, datos que vienen por POST o por GET.

Así pues, con estas pequeñas reglas del htaccess, podrás subir archivos de cualquier tamaño. Sólo tienes que configurar los parámetros para que te permitan hacer el upload de ficheros del tamaño que desees.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Martin Franco

17/3/2009
No funciona esta solución cuando estas utilizando una IP compartida en el hosting.

Emilio Figueroa

18/3/2009
Es preferible hacer la configuración con la función ini_set de php dentro del mismo script, ya que se tiene mayor control sobre la ejecución, y sobre el script y el momento en que se utiliza dicha configuración.

halyna

27/8/2010
quiero que windows live hotmail plus me permita tener y mandar archivos mas grande
no puedo mandar los fotos de tamaño mas grande.permitame los archivos mas grande.gracias

:D

24/11/2010
agradecer
muchas grascias por fin pude subir un fu.k archibo de mas de 2 megas

claudio

12/2/2014
aun con problemas con upload_max_filesize
Estimados, pido de su ayuda, he seguido lo que indican, pero el sitio se me cae con el siguiente error "Internal Server Error" (imagen adjunta en el link

https://skydrive.live.com/redir?resid=AB1AAC72A7BD268C!330&authkey=!AEKlETPFuZ5klzk&v=3&ithint=photo%2c.png

También he seguido otros sitios, donde indican modificar el archivo PHP.INI, lo cual también lo he realizado pero aun asi sigue la limitante de 2MB (dejo link de los otros sitios)
http://wordpress.org/support/topic/increasing-upload-max-file-size-in-phpini
http://wordpress.org/support/topic/change-maximum-upload-size-and-find-phpini
Finalmente el Hosting donde tengo mi sitio que quiero levantar me indican que estos cambios están hechos lo cual dejo imagen de la configuración PHP que realiza el equipo de soporte del hosting.

http://sdrv.ms/1bozIRf

Favor pido de su ayuda, ya que llevo mas de 15 días tratando de armar mi sitio y no he podido.

Gracias de antemano
Claudio

Juan

21/5/2014
NO FUNCIONA
Hola esto no sirve de nada y dice el autor con toda seguridad que debe de funcionar quien sabe en donde por que no es a si.

Joz

13/6/2014
..
Obviamente no es culpa del autor que a algunos no les funcione ya que también depende de otras cosas como las restricciones del servidor, configuración y características.

Ruth Moreno

02/7/2014
Problema en carga de archivos
Hola Miguel, muy buenos días, muchas gracias porque varias veces tus post me han sacado de líos :-) Ahora tengo otro: uso un código php para hacer upload, básicamente es lo siguiente:
move_uploaded_file($_FILES["file"]["tmp_name"],$archivo)
con condiciones para que admita imágenes y pdf de máximo 1 MB. Algunas veces, el archivo carga distorsionado, me explico: si comparo el archivo original con el que se subió al servidor, tienen el mismo tamaño y extensión, pero el archivo en el servidor muestra la imagen distorsionada (muestra franjas blancas o de otros colores que ocultan el contenido, o simplemente la imagen incompleta). Usé comp.exe para comparar dos de estos archivos, y aparece error de desplazamiento, es decir, me confirma que los contenidos no son iguales pese a que el tamaño es el mismo. Inicialmente, este código de upload estaba dentro de una página que hacía otro montón de cosas, cargaba el archivo y luego enviaba un correo electrónico, así que pensé que podría tratarse de físico agotamiento :-), pero separé el proceso de carga (haciendo el upload primero, usando ajax), y nada, el resultado es el mismo, el archivo sube distorsionado en ocasiones (como dije antes, no sucede en todos los casos). La conexión de algunos usuarios no es buena, pero desde esa misma conexión me envían el mismo archivo adjunto a un correo de Gmail, por ejemplo,y llega bien, así que ese tampoco sería el problema, creo yo. Así que estoy como al comienzo :-( Te agradezco la ayuda que puedas brindarme, ¡buen día!!

Juan Carlos

22/11/2014
Subir archivos mayores de 200 megas
Lo hice con .htaccess pero no funciona. Alguna solución.

Ronald

14/7/2015
Funciona
Hice las modificaicones en el .htaccess de la siguiente manera
php_value upload_max_filesize 100M
php_value post_max_size 100M
php_value max_execution_time 2000
php_value max_input_time 2000
y adicionalmente en el php.ini
php_value upload_max_filesize 100M
y me funciono, es importante agregar dicho archivo en el directorio raíz del servidor (www)

aesd

22/10/2015
funciona
funcionó

raulrosado91

28/1/2016
help
por favot alguien me puede decir como creo el archivo .htaccess y donde lo pongo pq no he encontrado como crearlo

jose antonio

09/3/2016
Esto es lo que me ha funcionado en mi caso y la solución la he copiado de otro post. el cambiar .htaccess hacia que la pagina no funcionase.
Hola a todos, he probado de todo y lo que me funciona actualmentes esto:
crear un archivo php.ini y subirlo al root, wp-admin y wp-content/plugins
El contenido del php ini con los valores como indican más arriba no me ha funcionado, pero si con los valores siguientes:
memory_limit = 64M; //Para aumentar el limite de memoria
max_execution_time = 7200; //Aumentar el tiempo de espera
upload_max_filesize = 10M; //aumentar tamaño permitido de archivos a subir
post_max_size = 20M; //aumentar tamaño de post.
Espero que les sirva tanto como a mi...
PD. Si lo suben solo al root, y aplican un info.php para ver la información php, verán que la información ha cambiado, pero cuando quieran subir, publicar algo, aún se verán errores de memoria o tamaño de archivo no permitido, etc... para evitar esto, el mencionado archivo debe estar también en el wp-admin y la carpeta de plugins.

Juan Condori

19/8/2016
Funciona
Si funciona editando el mismo php.iniproduction , tambien editando php.ini de Apache , pero creando un .htaccess y escribiendo :
php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200