¿Cuál prioriza Wordpress cuando se trata de php.ini, wp-config y .htaccess?

10

Digamos que quiero cambiar el límite máximo de carga para un sitio web de Wordpress y le doy los siguientes valores:

wp-config.php: 128MB php.ini: 256MB .htaccess: 64MB

Entonces, ¿cuál priorizaría Wordpress al procesar según sea necesario?

imranhunzai
fuente

Respuestas:

13

No está claro por su pregunta qué está cambiando en cada uno de estos archivos, pero supongo que en cada caso es la upload_max_filesizeconfiguración de PHP .

En general, la configuración se aplicará en este orden, cada uno anulando el valor anterior:

  1. php.ini
  2. Directivas de Apache en .htaccess
  3. llamadas a ini_set()

Sin embargo, esta configuración se define como PHP_INI_PERDIR, lo que, como se explica en esta página, significa que no se puede configurar usando ini_set, por lo wp-config.phpque no se puede cambiar. Entonces, en el ejemplo que da en la pregunta, tomará el valor de .htaccess de 64MB.

Puede verificar esto ejecutando echo ini_get('upload_max_filesize');en algún lugar de su código.

Tenga en cuenta que se pueden establecer otros valores de lugares que no he enumerado anteriormente, como archivos php.ini por usuario y otros contextos de configuración de Apache . Además, algunos de estos se pueden deshabilitar , por lo que si su servidor no está configurado para permitir anulaciones en .htaccess, tampoco podrá establecer un valor allí.

También tenga en cuenta que Wordpress incluye algunas de sus propias variables de configuración, que interactúan de diferentes maneras con la configuración de PHP. Por ejemplo, WP_MEMORY_LIMITintentará aumentar la memory_limitconfiguración de PHP en el inicio, pero tiene un código que verifica y nunca la baja . No hay una regla general para esto, será diferente para diferentes configuraciones.

IMSoP
fuente
php.ini es siempre el primero en elegir.
WpMania.Net
5

Básicamente, los tres archivos se tienen en cuenta.

WordPress / su servidor verificará en el siguiente orden:

wp-config.php > .htaccess > php.ini

Si algo en un "nivel superior" (más adelante en la cadena) está limitando su valor, el valor anterior se ignorará o se sobrescribirá. Si falta una parte de la cadena, el valor en, .htaccesspor ejemplo, se utilizará el siguiente más alto.

En su ejemplo .htaccess, limitaría max_upload_sizea 64 MB, aunque su servidor estaría bien con hasta 256 MB y WordPress también aceptaría primero hasta 128 MB en tamaño de archivo.

También puede establecer un límite diferente a través del .htaccessarchivo y al hacerlo, sobrescribe el valor php.ini, de modo que ya no sea el valor dominante. Esto funciona en muchos entornos de alojamiento, por lo que hay muchas posibilidades de que pueda subir o bajar max_upload_sizede esta manera.

Si tiene un servidor / servidor más estrictamente configurado, es posible que la opción de anular la configuración php.iniesté deshabilitada. En este caso, anular max_upload_sizedesde .htaccessno funcionará, por lo que esto podría ser un factor limitante.

flomei
fuente
8
¿Cómo es esto "no cómo funciona" cuando se da una lista de prioridades, tal como lo pide la pregunta? Y si .htaccessestá en el medio de la lista, ¿por qué ese sería el factor limitante?
IMSoP
Creo que mi expresión no estaba clara. Entendí su pregunta como "si configuro un valor más alto en wp-config, ¿eso 'dominará' a los demás?" y que no es así como funciona. ;-) @bns hizo una mejor explicación al respecto.
flomei
Bien, veo a qué te refieres ahora. Sin embargo, como comenté en la respuesta de bns, no puedo encontrar documentación que respalde la afirmación de que no se puede anular con un valor más alto. El valor de wp-config.php siempre se ignorará, como se explica en mi respuesta, pero estoy bastante seguro de que un valor más alto en .htaccess anulará uno más bajo en php.ini.
IMSoP
Tiene razón en parte, pero se pueden desactivar los valores de php.ini de .htaccess, vea mi respuesta actualizada.
flomei
Su actualización aún implica que solo puede establecer un valor más bajo a través de .htaccess. No sé de ninguna razón por la que no puedas establecer un valor más alto allí. El hecho de que el mecanismo se puede deshabilitar es un buen punto, y uno lo pasé por alto en mi respuesta, pero suponiendo que cualquier configuración de PHP esté permitida en .htaccess, entonces un valor en .htaccess absolutamente "dominará" un valor en php.ini por el mismo escenario.
IMSoP
3

Creo que flomei debería editar la respuesta, porque esa es la respuesta correcta pero una mala explicación. Php.ini -> .htaccess -> wp-config.phpes en realidad el orden en que se leerá cada archivo y establecerá los valores teniendo en cuenta que no hay una configuración definida previamente. Pero en el caso de que haya una configuración previamente definida, se "anulará" solo si la nueva configuración es más baja.

Eso significa que si tiene wp-config.php con 64Mb y .htaccess con 32 MB: wp-config.php no anulará esa configuración porque ya hay un límite inferior y terminará con 32Mb.

Pero si tiene wp-config.php con 32Mb y .htaccess con 64 MB, wp-config.php reducirá la configuración anterior a 32Mb.

Editar: para aclarar, como señala IMSoP, wp-config.php simplemente le permite establecer un tamaño que es más restrictivo que lo que permite la configuración de PHP si está cambiando 'WP_MEMORY_LIMIT', no le permite ir más allá de eso. Entonces, en realidad no es una anulación de la configuración. De hecho, hay controles separados realizados en diferentes puntos en tiempo de ejecución. Si está cambiando la configuración de php upload_max_filesizecomo él supone (la pregunta no indica qué configuración está cambiando), eso no tiene ningún efecto.

Además, deberá tener en cuenta que post_max_sizedebe ser mayor que upload_max_filesizeen su configuración de php

bns
fuente
2
¿Puede vincular a cualquier documentación para este "solo anulación si el nuevo valor es menor", porque ciertamente no es cierto para ninguna otra configuración de PHP que he visto. Tampoco se menciona en esta página del manual . Lo que se menciona, como señalo en mi respuesta, es que upload_max_filesizeno se puede cambiar en tiempo de ejecución (presumiblemente porque es demasiado tarde para que tenga algún efecto), por wp-config.phplo que no puede afectarlo de una manera u otra. También se menciona un valor predeterminado incorporado de 2 MB, y definitivamente puede establecerlo más alto que eso.
IMSoP
Eso es básicamente lo que mi equipo de soporte de proveedores de hosting me expandió cuando tuve el mismo problema, buscaré el correo electrónico y lo actualizaré si lo encuentro. No estoy realmente seguro de si dentro del servidor realmente anula el valor, o es solo que las verificaciones se realizan en tiempo de ejecución en diferentes lugares, por lo que el comportamiento es así.
bns
1
Solo para reiterar, si la línea a la que está agregando wp-config.phpes ini_set('upload_max_filesize', '32M');que no tendrá ningún efecto , porque esa configuración no se puede establecer en tiempo de ejecución como se define comoPHP_INI_PERDIR . (A menos que la página de documentación sea incorrecta, pero parece poco probable).
IMSoP
No, tienes razon. No es realmente una anulación de la configuración. Es solo otra restricción separada, la actualizaré según corresponda para evitar confusiones.
bns
1
@IMSoP / bns: creo que tal vez ha habido un poco de confusión entre wp-config.phpvalores específicos y establecer valores arbitrarios de PHP con ini_set(). Según tengo entendido, wp-config.phptiene que ver principalmente con la configuración de valores de configuración específicos de WordPress y muchos de estos están restringidos (es decir, límite superior impuesto) por la configuración de configuración PHP subyacente ( WP_MEMORY_LIMITcomo se menciona en la respuesta). Esto es una cosa de WordPress. Sin embargo, cuando se configuran valores arbitrarios de configuración de PHP utilizando ini_set()PHP, no existe tal restricción.
MrWhite