Cambiar el tamaño máximo de carga de archivos


513

Tengo un sitio web alojado en una PC a la que no tengo acceso. Tengo un formulario de carga que permite a las personas subir archivos mp3 de hasta 30 MB de tamaño. Mi script del lado del servidor está hecho en PHP.

Cada vez que intento cargar un archivo, recibo un error que dice que el archivo excede el tamaño máximo permitido, por lo que necesito aumentar el tamaño. Mi investigación en la web sugirió cambiar el .htaccessarchivo al que no tengo acceso, por lo que no funcionará. Otros sugirieron que debería agregar un php.iniarchivo personalizado a mi raíz que no funcionó. ¿Cualquier otra sugerencia?

Respuestas:


877

Debe establecer el valor de upload_max_filesizey post_max_sizeen su php.ini:

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

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

Después de modificar los archivos php.ini, debe reiniciar su servidor HTTP para usar la nueva configuración.

Si no puede cambiar su php.ini, no tiene suerte. No puede cambiar estos valores en tiempo de ejecución; las cargas de archivos superiores al valor especificado en php.ini habrán fallado cuando la ejecución llegue a su llamada ini_set.

Consulte la Descripción de las directivas principales de php.ini .


44
¿quizás conoces la ruta predeterminada en la que se almacena el archivo php.ini?
Yo Momma

1
En Linux, generalmente está en / etc / php / o algo así. Si está en un servidor compartido, no tiene suerte a menos que su proveedor de alojamiento sea lo suficientemente generoso como para proporcionar un archivo php.ini por usuario.
Johannes Gorset

44
Si usa WAMP en Windows, puede editarlo haciendo clic en el icono de WAMP> PHP -> php.ini. En Debian, mi archivo de configuración está en / etc / php5 / apache2.
meagar

19
Sugiero establecer un tamaño más alto en post_max_size. El tamaño general de los campos publicados puede ser mayor que el tamaño del archivo, por lo que si tiene el caso límite de que alguien cargue un archivo de 40 MB, fallará debido a que se excedió post_max_size.
acme

2
Tenga en cuenta que memory_limit también limita el tamaño de carga.
Daniel

151

Puede cambiarlo a través de un .htaccessarchivo.

.htaccesslos archivos se almacenan en el mismo directorio que sus .phparchivos. Modifican la configuración para esa carpeta y todas las subcarpetas. Simplemente utilícelos creando un .htaccessarchivo en el directorio de su elección (o modifíquelo si está presente).

Lo siguiente debería permitirle aumentar su límite de carga (si el proveedor del servidor permite cambios de configuración de PHP a través de .htaccess).

php_value upload_max_filesize 40M
php_value post_max_size 42M

3
Parece que no siempre funciona. En mis máquinas de desarrollo, establecer el valor apropiado en .htaccess hizo el trabajo. Sin embargo, en el alojamiento compartido, esta configuración no funciona, sin embargo, el mensaje de error muestra que el tamaño máximo de carga permitido es ese valor que configuré en .htaccess. Entonces ocurre una situación muy extraña.
Eugeniu Torica

55
Parece que agregar esto en .htaccess solo funciona si está ejecutando Apache. Pruébalo y funciona bien para mí.
AngelGris

Esto no funciona si estas 2 líneas en php.ini no fueron comentadas :; Nombre para los archivos php.ini (.htaccess) definidos por el usuario. El valor predeterminado es ".user.ini" ;user_ini.filename = ".user.ini" ; Para deshabilitar esta función, configure esta opción en valor vacío;user_ini.filename =
Alan Deep

Vale la pena señalar que si está usando apache CGI o Fast CGI, esto causará 500 errores. Envuelva esto dentro de <IfModule mod_php7.c> </IfModule>
Shardj

59

Tuve el mismo problema y creé un archivo .user.ini y lo puse en el directorio en el que se encontraba el script de carga. Que dentro de ese archivo establezco estos dos valores:

  upload_max_filesize = 40M

  post_max_size = 40M

¡y funcionó muy bien para mí!


2
Excelente. Funciona con fastcgi habilitado también. Requiere PHP5.3 o más reciente.
Ciantic

1
Ok, esto funcionó en un servidor compartido cuando nada más funcionaría. Gran hallazgo.
Edward Potter

55

También puede usar la función ini_set (solo para la versión PHP inferior a 5.3):

ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

Como dijo @acme, en php 5.3 y superiores, esta configuración son directivas PHP_INI_PERDIR, por lo que no se pueden establecer usando ini_set. Puede usar user.ini en su lugar.


38
En versiones recientes de PHP, estas configuraciones iniciales son solo PHP_INI_PERDIR , por lo que no puede configurarlas en su script. Ver aquí para más detalles.
acme

46

Para localizar el archivo ini, primero ejecute

php -i | grep -i "loaded configuration file"

Luego abra el archivo y cambie

upload_max_filesize = 2M
post_max_size = 2M

reemplazando el 2M con el tamaño que desea, por ejemplo 100M

También tengo una publicación de blog con un poco más de información http://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-in-the-php-ini- archivo para wordpress


55
Muestra el archivo como /etc/php5/cli/php.inipero mi archivo de configuración es /etc/php5/apache2/php.ini. Algún tipo de engaño.
Fredrick Gauss

Hay 2 archivos php.ini ... y con ese comando en respuesta, ¡te muestra cuál estás usando! ¡Entonces hay que hacer cambios para que surta efecto!
lewis4u

40

Tengo el mismo problema en el pasado ... y lo solucioné .htaccess archivo

Cuando realiza cambios en la configuración de php .htaccess, debe colocar las configuraciones en la IfModuleetiqueta, aparte del error del servidor interno se producirá el .

Este es un ejemplo, funciona bien para mí:

<IfModule mod_php5.c>
   php_value upload_max_filesize 40M
   php_value post_max_size 40M
</IfModule>

Y esto es referance php si quieres entender más. http://php.net/manual/en/configuration.changes.php


55
Siempre que tenga capacidades de anulación.
AbsoluteƵERØ

3
Para admitir PHP.7 agregue el mismo bloque con: <IfModule mod_php7.c>
Mostafa

16

Resolví este problema creando un archivo llamado .user.inien el directorio donde residen los scripts del archivo PHP (esto significa que cualquier script PHP en este directorio obtiene el nuevo límite de tamaño de archivo)

Los contenidos de .user.inifueron:

upload_max_filesize = 40M
post_max_size = 40M

2
Esta es la solución para mí. Solo funciona bien. Si está utilizando un marco como codeignitor, ".user.ini" debe estar en el mismo lugar que index.php
The Dude

Gracias. Eso funciona para mi. Esto es ideal para alojamiento compartido, donde no tiene acceso a php.ini. Solo agregaría que está disponible desde PHP 5.3
yacsha

6

Yo tuve el mismo problema. He intentado tres formas que generalmente se sugerían:

  1. funciones.php
  2. php.ini
  3. .htaccess

ninguno si eso resolvió mi problema. Estoy usando GoDaddy y encontré una solución sugerida que era:

  1. llegué a Web Hosting , luego Administrar
  2. En Software seleccione Seleccionar versión de PHP
  3. Seleccione Cambiar a las opciones de PHP que se encuentran en la esquina superior derecha de la tabla en color de fuente: azul
  4. En la parte inferior, probablemente tendrás upload_max_filesize = 2M
  5. Ahora, siéntete libre de cambiarlo
  6. ¡Asegúrese de hacer clic en el botón Guardar !
  7. Ahora vaya a su panel wp-admin, seleccione Medios y luego Agregar

Voila! Ahora tiene un tamaño de archivo de carga máximo diferente :)


6

Muchas veces he notado que el sitio con alojamiento compartido no permite cambiar la configuración en los archivos php.ini. uno tampoco puede crear el archivo .htaaccess en absoluto. en tal situación uno puede intentar seguir cosas

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);

6

las respuestas son un poco incompletas, 3 cosas que tienes que hacer

en php.ini de su instalación de php (nota: dependiendo de si lo desea para CLI, apache o nginx, encuentre el php.ini correcto para manipular. Para nginx generalmente se encuentra en /etc/php/7.1/fpmdonde 7.1 depende de su versión. Para apache generalmente /etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

o establecer otros valores. Reinicie / vuelva a cargar apache si tiene instalado apache o php-fpm para nginx si usa nginx.


5

Bueno, me gustaría agregar mis 2 centavos aquí.

Estoy usando alojamiento web compartido y abordé este problema muchas veces, intenté resolverlo por mi cuenta pero fue en vano. Finalmente logré resolverlo revisando varias fuentes web y contactando a mi proveedor de servicios de alojamiento. Mis preguntas fueron "¿Cómo puedo cambiar el valor de php memory_limiten el alojamiento web compartido?", "¿Cómo puedo cambiar el valor de php upload_max_filesizeen el alojamiento web compartido?", "¿Cómo puedo cambiar el valor de php max_input_varsen el alojamiento web compartido?", "¿Cómo puedo cambiar el valor de php max_execution_timeen webhosting compartido? "," ¿Cómo puedo cambiar el valor de php max_input_timeen webhosting compartido? " y muchos más configurando o cambiando php.ini o .htaccessarchivo. Traté de cambiarlos pero surgieron problemas. Finalmente contacté a mi proveedor de alojamiento y resultó que configuré mi php como nativo, lo cambiaron a php 5.6,

"Su PHP se configuró en modo 'nativo', lo que significa que no puede anular esos valores. Lo he cambiado a solo '5.6', por lo que debería estar listo".

Después de eso, conecté mi sitio web a través de ftp Filezilla, también no olvide hacer que su servicio ftp muestre archivos ocultos y su computadora local para hacerlo, porque el .htaccessarchivo estaba oculto en mi computadora portátil local y en mi sitio web. Estaba disponible en la carpeta public_html, simplemente lo descargué y agregué los siguientes códigos al final del archivo y luego lo cargué nuevamente al servidor:

php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 64M
php_value max_input_vars 1800
php_value max_execution_time 300
php_value max_input_time 300

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Todo funciona correctamente por el momento, si alguno de ustedes supera algunos problemas, escriba aquí y avíseme para que pueda cambiar los códigos que se muestran arriba. Por cierto, también subo algunas fotos que muestran el cambio.

Una cosa más que casi olvidé mencionar la instalación de ZipArchive en su servicio de alojamiento web compartido, logré marcar ese requisito simplemente yendo a la configuración de php a través de mi cpanel, haga clic en las extensiones del selector de php y luego marque la sección zip, eso es todo.

Gracias.

PD: Estoy abierto a las buenas prácticas, y si ves alguna mala práctica aquí, házmelo saber, intentaré cambiarla. Gracias.


4

Quizás esto debería ser un comentario para @ seanb123 y @Fredrick Gauss comentando su comentario, pero para mí en Drupal 8.1 con PHP 7, el archivo que necesitaba modificar estaba ubicado aquí:

/etc/php/7.0/apache2/php.ini

Modifiqué probablemente otros cuatro archivos php.ini, incluido el que mi sistema llamó "Archivo de configuración cargada" ( php -i | grep -i "loaded configuration file") y el que se encuentra en la página info.php, pero ninguno de ellos ayudó. La clave para descubrir el camino correcto fue encontrada en un sitio desde 2012. Dijeron que el camino "/etc/php5/apache2/php.ini"estaba en desuso incluso ANTES ENTONCES, pero me dio una pista de dónde encontrarlo. Para PHP7 es un poco diferente que en PHP5 pero el concepto es el mismo.

Tal vez esto ayude a algunos idiotas indefensos como yo.

Dicho esto, la respuesta al OP en mi caso sería que alguien con privilegios de administrador en la caja tendría que hacerlo.

El sitio que me ayudó: http://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

Esto también se trata aquí: Importar límite de tamaño de archivo en PHPMyAdmin

EDITAR: el texto completo de mi nota para mí:

Para cambiar el tamaño máximo de carga, edite upload_max_filesize y [si es necesario?] Post_max_size en /etc/php/7.0/apache2/php.ini (o en versiones anteriores: /etc/php5/apache2/php.ini)

/etc/init.d/apache2 restart

EDITAR DE NUEVO: dado que está importando archivos grandes, es posible que deba cambiar el tiempo de espera para procesarlos. En mi caso, el archivo llamado "config.default.php" se encontró en /usr/share/phpmyadmin/libraries/config.default.phpla variable con la $cfg['ExecTimeLimit'] = 300; que cambié la mía a 900 para una gran importación, por ejemplo. Luego necesitas reiniciar Apache


3

¡Ninguna de esas soluciones me funciona! (ya establecido en 32M por defecto). El problema es en la mayoría de los casosmax_allowed_packet

Estoy trabajando en localhost y usando MAMP.

Aquí hay soluciones;

1. Si no tienes my.ini

Añadir

--max_allowed_packet=168435456

A

...\MAMP\bin\startMysql.sh

2. Si tienes my.ini

Debajo

[mysqld]

Añadir

max_allowed_packet=100M

¡HECHO!


¡Se agregó max_allowed_packet = 128M a php.ini y .user.ini y eso lo hizo por mí!
Molasar

2

Tres cosas que debes verificar.

upload_max_filesize, memory_limity post_max_sizeen el archivo de configuración php.ini exactamente.

Todas estas tres configuraciones limitan el tamaño máximo de datos que PHP puede enviar y manejar.

Típicamente post_max_sizey memory_limitnecesita ser más grande que upload_max_filesize.


Por lo tanto, debe verificar tres variables en total para estar absolutamente seguro.


2

Con WAMPtodo es bastante fácil

WAMP Icono> PHP> Configuración de PHP> upload_max_filesize = nM> n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M o Choose (personalizado)).

Los servicios se recargan automáticamente.

Pero, si realmente no tiene acceso al servidor, puede explorar escribir una chunkingAPI.


0

También tuve este problema y lo solucioné estableciendo esta configuración en /etc/nginx/nginx.conf

client_max_body_size 0;

0, como en ilimitado.

Y también, si tiene un proxy inverso ejecutándose con nginx, ese servidor también debería tener esta configuración (Esto es lo que me desanimó aquí)


0

Si editó el archivo php.ini correcto, reinició Apache o Nginx y aún no funciona, entonces también debe reiniciar php-fpm :

sudo service php-fpm restart 

0

Como cambiar globalmente es algo arriesgado, estaba tratando de aumentar el valor máximo de carga para un solo script big_file_upload.php . Por alguna razón ini_setno ayudó. Después de algunas investigaciones, se me ocurrió esto. Póngalo .htaccess(a menos que se cambie el nombre a través de AccessFileName)

<If "%{REQUEST_URI} == '/subfolder/big_file_upload.php'" >
php_value upload_max_filesize 200M
php_value post_max_size 200M
</If>
<Else>
php_value upload_max_filesize 1M
php_value post_max_size 1M
</Else>

Trabajó para mi.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.