Alterando os tamanhos de upload do php.ini de forma segura e mínima

1

Quando eu quiser alterar as famosas escalas 2M para post_max_size e upload_max_size em php.ini , eu uso a seguinte solução de sed de duas linhas que é independente da versão (consulte asterisco):

sed -i 's/post_max_size \= .M/post_max_size \= 200M/g'             /etc/php/*/fpm/php.ini
sed -i 's/upload_max_filesize \= .M/upload_max_filesize \= 200M/g' /etc/php/*/fpm/php.ini

Existe uma maneira ainda mais curta e minimalista de fazer a mesma mudança de dois objetos em um único comando? Algo que ainda será seguro, e versão agnóstica.

Como servidor web, uso o Nginx.

    
por Arcticooling 06.01.2018 / 01:18

1 resposta

1

Uma maneira desajeitada de fazer os dois parâmetros de uma vez é

sed -i 's/^(\w*[td]_max_\w*size\s*=\s*).M/00M/' filename(s)

Primeiro de tudo, de acordo com esta Lista de diretivas do arquivo php.ini , existem apenas três palavras-chave que contêm _max_ e terminam com size :

  • imlib2.font_cache_max_size
  • post_max_size
  • upload_max_filesize

Observe que a carta imediatamente antes do _max_ é diferente em cada caso:

  • imlib2.font_cache_max_sizee
  • post_max_sizet
  • upload_max_filesized

então, pesquisando por [td]_max_ , podemos eliminar o primeiro.

O comando em detalhes:

  • ^ , claro, restringe a expressão regular para corresponder ocorrências no início da linha. Se você quiser combinar strings que não estão no começo da linha, remova o ^ . Nota: a menos que você adicione algo para especificar o contrário, isso fará com que o comando altere as linhas comentadas, o que pode ser confuso.
  • \(…\) identifica um grupo de caracteres. Nós vamos usá-lo para combinar tudo até (mas não incluindo) o valor do parâmetro (ou seja, o número após o = ).
  • \w*[td]_max_\w*size corresponde
    • qualquer número de caracteres "palavra" (alfanuméricos),
    • a t ou d ,
    • _max_ ,
    • qualquer número (possivelmente zero) de caracteres de palavras e
    • size .
  • \s*=\s* corresponde a qualquer número de caracteres de espaço (espaço ou tabulação regular) um = e qualquer número de caracteres de espaço novamente. (Você não precisa dizer \= .)

    Este é o final do grupo, marcado por \) .

  • Como você sabe, .M corresponde a qualquer caractere seguido por M . (Você já está usando isso.)
  • 00M parece confuso, mas é apenas
    • , que substitui os caracteres no grupo \(…\) por si,
    • seguido por 200M , que é o que você deseja substituir o nM number com.

Você não precisa do g a menos que você espere combinar várias strings na mesma linha (o que é impossível se você ancorar a expressão regular para o início da linha com ^ ).

Substitua filename(s) por seu /etc/php/*/fpm/php.ini glob, ou qualquer outro nome de arquivo ou lista de nomes de arquivos.

Antes de fazer o acima, você deve executar

sed -n 's/^(\w*[td]_max_\w*size\s*=\s*).M/00M/p' filename(s)
que mostrará o que o primeiro comando fará.     
por 06.01.2018 / 06:02