Cambiar upload_max_filesize en PHP

84

Estoy usando PHP 5.3.0 y encontré algo que podría ser un error (en cuyo caso lo informaré) o podría ser yo, así que pido asegurarme.

Al ejecutar este código:

<?php
ini_set('upload_max_filesize', '10M');
echo ini_get('upload_max_filesize'), ", " , ini_get('post_max_size')

Termino con:

2M, 8M

Esto es a pesar de que mi php.ini configuró estos más altos:

upload_max_filesize = 10M
post_max_size = 10M

(ocurre solo una vez)

Debido a que el error se produce después de establecer el valor y también en php.ini, me inclino a pensar que es un error. ¿Alguien puede confirmarme o señalarme dónde me estoy equivocando?

Actualización : Parece que reiniciar Apache solucionó esto; siempre pensé que no era necesario reiniciar si cambiaba php.ini.

Ross
fuente
9
"Siempre pensé que no era necesario reiniciarlo si cambiaba php.ini". PHP CLI detecta los cambios inmediatamente, porque analiza php.ini con cada invocación. mod_php analiza php.ini una vez, cuando apache se inicia.
Frank Farmer
Tuve el mismo problema recientemente. upload_max_filesize no entraría en vigor sin reiniciar Apache. Estoy en PHP 5.2.9. Después del reinicio, todo funciona bien.
Haluk
Para evitar un reinicio completo de Apache, simplemente use "sudo service apache2 reload"
user1048839

Respuestas:

68

No puede usar la notación abreviada para establecer valores de configuración fuera de PHP.ini. Supongo que se está volviendo a 2 MB como el valor predeterminado compilado cuando se enfrenta a un valor incorrecto.

Por otro lado, no creo upload_max_filesizeque se pueda configurar con ini_set(). La lista "oficial" dice que sí PHP_INI_PERDIR.

Robar
fuente
11
¡Piensas bien! No puede configurar upload_max_filesize usando ini_set () porque upload_max_filesize es un tipo PHP_INI_PERDIR que significa que se puede cambiar solo a través de: php.ini, .htaccess o httpd.conf como se indica en: php.net/manual/en/configuration.changes.modes. php
Marco Demaio
2
En realidad, puede utilizar la notación abreviada fuera de PHP.ini; puedes usarlo en .htaccessy también con ini_set. Sin embargo, quizás no en todas las versiones.
Protector uno
70

¿Utiliza un proveedor de alojamiento compartido? Puede ser que la configuración maestra anule cualquier cosa que intente cambiar. ¿Ha intentado agregarlos a su .htaccess?

php_value upload_max_filesize 10M
php_value post_max_size 10M
karim79
fuente
1
No, esta es mi propia instancia de Apache / PHP en mi máquina (que es Windows si es relevante). Intentaré agregarlos a la configuración de Apache.
Ross
5
Actualización: Esto sí lo afecta (los cambia a 10) por lo que este método funciona. Todavía estoy bastante confundido en cuanto a por qué no funciona en php.ini o usando ini_set.
Ross
+1 este es definitivamente el camino a seguir si no puede acceder a php.ini - muchas gracias.
Alex Coplan
3
Tenga en cuenta que esto solo funciona con Apache que ejecuta PHP como módulo, no como CGI
ChrisV
Yo diría que este es el método preferido incluso con acceso al php.iniarchivo. Le permite establecer estos permisos en función de las necesidades en lugar de como una configuración global.
Bryant Jackson
42

Como me encontré con este problema en un host compartido y no pude agregar los valores a mi archivo .htaccess, pensé en compartir mi solución.

Hice un archivo ini con los valores en él. Simple como eso:

Cree un archivo llamado ".user.ini" y agregue sus valores

upload_max_filesize = 150M
post_max_size = 150M

Boom, problema resuelto.

libra
fuente
¡Trabajó para mi! ¡Gracias!
Justin Putney
4
"Además del archivo php.ini principal, PHP busca archivos INI en cada directorio, comenzando con el directorio del archivo PHP solicitado y avanzando hasta la raíz del documento actual". php.net/manual/en/configuration.file.per-user.php
hasta el
1
¡Funciona muy bien con un sitio de wordpress! ¡Gracias!
avenged_badger
Esto funcionó muy bien ya que no puedo hacerlo desde .htaccess. ¡Gracias hombre!
Estratega
PHP por defecto vuelve a leer el archivo user.ini cada 5 minutos. Así que tenga paciencia si el resultado no aparece de inmediato
Andrey Yaremenko
10

Logré que esto funcionara usando un archivo .user.ini en el mismo directorio que mi script index.php que carga mi aplicación. Aquí están los contenidos:

upload_max_filesize = "20M"
post_max_size = "25M"

Esta es la solución recomendada para Heroku.

dwenaus
fuente
5

Esto también se puede controlar con la configuración de apache. Compruebe httpd.conf y / o .htaccess para ver algo como lo siguiente:

php_value upload_max_filesize 10M
Byron Whitlock
fuente
0

Si está ejecutando en un servidor local, como wamp o xampp, asegúrese de que esté usando el php.ini que cree. Por lo general, estos servidores tienen un php.ini predeterminado que no está en su carpeta de documentos html.

Casa en la playa
fuente
0

¡Esta solución solo se puede aplicar si el problema está en una instalación de WordPress!

Si no tiene acceso FTP o es demasiado vago para editar archivos,

Puede utilizar el complemento Aumentar el tamaño máximo del archivo de carga para aumentar el tamaño máximo del archivo de carga.

Sahan
fuente
0

De forma predeterminada, PHP permite cargar un archivo de 2 MB como máximo en el servidor. Pero puede modificar el tamaño máximo de carga de archivos según su condición. Al usar el archivo de configuración PHP php.ini, puede aumentar o disminuir el tamaño de carga del archivo en PHP.

Primero abra el archivo php.ini en su editor de texto. Busque la variable upload_max_filesize y estipule el tamaño que desea aumentar.

Busque la variable post_max_size y estipule el tamaño que desea aumentar.

post_max_size = 128M

puedes comprobar esto desde aquí

hammad khan
fuente
-1

si usa ini_set sobre la marcha, encontrará aquí http://php.net/manual/en/ini.core.php la información que, por ejemplo, upload_max_filesize y post_max_size no se puede cambiar sobre la marcha (PHP_INI_PERDIR).

Solo un cambio de configuración de php.ini, .htaccess o vhost parece cambiar estas variables.

sassman
fuente
-11

Puede usar también en el archivo php como este

<?php ini_set('upload_max_filesize', '200M'); ?>
Nishant Patel
fuente