Qual Wordpress prioriza quando se trata de php.ini, wp-config e .htaccess?

10

Digamos que eu queira alterar o limite máximo de upload para um site Wordpress e forneço os seguintes valores:

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

Então, qual deles o Wordpress priorizaria ao processar quando necessário?

imranhunzai
fonte

Respostas:

13

Não está claro em sua pergunta o que você está alterando em cada um desses arquivos, mas presumo que, em cada caso, seja a upload_max_filesizeconfiguração do PHP .

Em geral, as configurações serão aplicadas nesta ordem, cada uma substituindo o valor anterior:

  1. php.ini
  2. Diretivas do Apache em .htaccess
  3. chama para ini_set()

No entanto, essa configuração é definida como PHP_INI_PERDIR, o que, conforme explicado nesta página, significa que não pode ser definida usando ini_set, portanto, wp-config.phpnão pode ser alterada. Portanto, no exemplo que você fornece na pergunta, o valor de .htaccess é de 64MB.

Você pode verificar isso executando echo ini_get('upload_max_filesize');algum lugar no seu código.

Observe que existem outros locais onde os valores não podem ser listados acima, como arquivos php.ini por usuário e outros contextos de configuração do Apache . Além disso, algumas delas podem ser desativadas ; portanto, se o servidor não estiver configurado para permitir substituições no .htaccess, você também não poderá definir um valor.

Observe também que o Wordpress inclui algumas de suas próprias variáveis ​​de configuração, que interagem de maneiras diferentes com a configuração do PHP. Por exemplo, WP_MEMORY_LIMITtentará aumentar a memory_limitconfiguração do PHP na inicialização, mas possui um código que verifica e nunca a reduz . Não há regra geral para isso, será diferente para configurações diferentes.

IMSoP
fonte
O php.ini é sempre o primeiro a escolher.
WpMania.Net
5

Basicamente, todos os três arquivos são levados em consideração.

O WordPress / seu servidor verificará na seguinte ordem:

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

Se algo em um "nível superior" (mais tarde na cadeia) estiver limitando seu valor, o valor anterior será ignorado ou substituído. Se um pedaço da cadeia estiver faltando, o valor em, .htaccesspor exemplo, o próximo valor mais alto será usado.

No seu exemplo, o .htaccesslimite seria max_upload_sizede 64 MB, embora seu servidor funcione com até 256 MB e o WordPress também aceite primeiro com tamanho de arquivo de até 128 MB.

Você também pode definir um limite diferente por meio do .htaccessarquivo e, ao fazer isso, substitui o valor de php.ini, para que ele não seja mais o valor dominante. Isso funciona em muitos ambientes de hospedagem; portanto, as chances são muito boas de você aumentar ou diminuir max_upload_sizedessa maneira.

Se você tiver um servidor / hospedagem mais estritamente configurado, é possível que a opção de substituir as configurações php.iniesteja desativada. Neste caso, substituindo max_upload_sizede .htaccesstrabalho ganhou't, assim que este poderia ser um fator limitante.

flomei
fonte
8
Como isso é "não como funciona" quando você fornece uma lista de prioridades, exatamente como a pergunta pede? E se .htaccessestá no meio da lista, por que esse seria o fator limitante?
IMSOP
Eu acho que minha expressão não era clara. Entendi sua pergunta como "se eu definir um valor mais alto no wp-config, isso 'dominará' os outros?" e que não é assim que funciona. ;-) @bns fez uma explicação melhor sobre isso.
flomei
Certo, entendo o que você quer dizer agora. No entanto, como comentei na resposta do bns, não encontro documentação que suporte a alegação de que você não pode substituir por um valor mais alto. O valor wp-config.php sempre será ignorado, como explicado na minha resposta, mas tenho certeza de que um valor mais alto em .htaccess substituirá um valor mais baixo no php.ini.
IMSoP 14/02
Você está parcialmente certo, mas a substituição dos valores php.ini de .htaccess pode ser desativada, veja minha resposta atualizada.
flomei
Sua atualização ainda implica que você só pode definir um valor mais baixo via .htaccess. Não sei por que você também não pôde definir um valor mais alto por lá. O fato de o mecanismo poder ser desativado é um bom ponto, e um que eu examinei na minha resposta, mas assumindo que qualquer configuração do PHP é permitida no .htaccess, um valor no .htaccess absolutamente "domina" um valor no php.ini para a mesma configuração.
IMSoP 14/02
3

Acho que o flomei deve editar a resposta, porque essa é a resposta certa, mas a explicação é ruim. Php.ini -> .htaccess -> wp-config.phpé, na verdade, a ordem em que cada arquivo será lido e definirá os valores levando em consideração que não há configurações definidas anteriormente. Mas no caso de uma configuração definida anteriormente, isso será "substituído" somente se a nova configuração for menor.

Isso significa que, se você tiver o wp-config.php com 64Mb e o .htaccess com 32 MB: o wp-config.php não substituirá essa configuração porque já existe um limite mais baixo e você terá 32Mb.

Mas se você tiver o wp-config.php com 32Mb e o .htaccess com 64 MB, o wp-config.php reduzirá a configuração anterior para 32Mb.

Editar: para esclarecer, como aponta o IMSoP, o wp-config.php permite definir um tamanho mais restritivo do que o permitido pelas configurações do PHP se você estiver alterando 'WP_MEMORY_LIMIT', não permitirá que você vá além disso. Portanto, não é realmente uma substituição de configurações. De fato, há verificações separadas feitas em diferentes pontos no tempo de execução. Se você está alterando a configuração do php upload_max_filesizecomo ele assume (a pergunta não indica quais configurações você está alterando), isso não tem efeito.

Além disso, você deverá levar em consideração que o valor post_max_sizedeve ser maior do que upload_max_filesizenas configurações de php

bns
fonte
2
Você pode vincular a qualquer documentação para isso "apenas substituindo se o novo valor for menor", porque certamente não é verdade para nenhuma outra configuração de PHP que eu já tenha visto. Também não é mencionado nesta página de manual . O que é mencionado, como indico na minha resposta, é que upload_max_filesizenão pode ser alterado em tempo de execução (presumivelmente porque é tarde demais para que isso tenha algum efeito), portanto wp-config.phpnão pode afetá-lo de uma maneira ou de outra. Um padrão built-in de 2MB também é mencionado, e você pode definitivamente defini-lo maior do que isso.
IMSOP
Isso é basicamente o que minha equipe de suporte do provedor de hospedagem me esperou quando tive o mesmo problema; procurarei o e-mail e atualizarei se o encontrar. Não tenho certeza se realmente dentro do servidor você substitui o valor, ou é apenas que as verificações são feitas em tempo de execução em locais diferentes, portanto, o comportamento é o seguinte.
bns
11
Só para reiterar, se a linha à qual você está adicionando wp-config.phpfor, ini_set('upload_max_filesize', '32M');ela nunca terá efeito , porque essa configuração não pode ser definida em tempo de execução, como é definidaPHP_INI_PERDIR . (A menos que página de documentação é errado, mas isso parece improvável.)
IMSOP
Não, você está certo. Não é realmente uma substituição de configurações. É apenas mais uma restrição separada, vou atualizar de acordo para evitar confusões.
bns 14/02
11
@IMSoP / bns - Acho que talvez tenha havido um pouco de confusão entre wp-config.phpvalores específicos e a definição de valores arbitrários do PHP ini_set(). Pelo que entendi, wp-config.phptem a ver principalmente com definir valores de configuração específicos do WordPress e muitos deles são realmente restritos (ou seja, limite superior imposto) pela configuração subjacente de configuração do PHP ( WP_MEMORY_LIMITcomo mencionado na resposta). Isso é coisa do WordPress. No entanto, ao definir valores de configuração arbitrários do PHP usando ini_set()no PHP, não existe essa restrição.
MrWhite