Como obter e definir variáveis php.ini através do terminal

2

Eu quero alterar algumas variáveis php.ini (php5.6) através do terminal. Exemplo: Eu preciso obter o valor post_max_size (que por enquanto é 8M ), exibi-lo no terminal, altere para 2048M e exiba-o novamente.

Como eu poderia fazer isso?

    
por zwitterion 27.12.2017 / 17:00

3 respostas

3

Obtenha:

grep '^post_max_size ' php.ini

Substituir:

sed -i 's,^post_max_size =.*$,post_max_size = 2048M,' php.ini

Observe que é uma boa ideia criar um backup de php.ini antes de executar sed :

cp php.ini php.ini.bak
    
por Arkadiusz Drabczyk 27.12.2017 / 17:12
1

Suponho que você tenha os valores em php.ini armazenados um por linha e separados por = com ou sem espaços adjacentes. Nem os nomes nem os valores das variáveis contêm = .

Para imprimir o valor de post_max_size (escolha um):

<php.ini awk -F"= *" '/^ *post_max_size/{print}'
<php.ini sed '/^ *post_max_size/!d;s/.*= *//'
<php.ini grep -oP '^ *post_max_size *= *\K.*'

Para alterar o valor de post_max_size para 2048M criando um backup chamado php.ini.bak :

sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini

Explicações

  • %código%
    • <php.ini awk -F"= *" '/^ *post_max_size/{print}' - deixe o shell abrir <php.ini e atribua-o ao stdin do programa, isso tem várias vantagens, consulte aqui
    • php.ini - definir -F"= *" seguido por zero ou mais caracteres de espaço como o delimitador de campo
    • = - da linha que começa com /^ *post_max_size/{print} print field post_max_size
  • %código%
    • 2 - <php.ini sed '/^ *post_max_size/!d;s/.*= *//' elete todas as linhas, exceto aquela que começa com /^ *post_max_size/!d
    • d - post_max_size ubstitute tudo antes de s/.*= *// e zero ou mais caracteres de espaço após ele por nada (= exclua)
  • %código%
    • s - print = nly as partes correspondentes de uma linha correspondente e usam <php.ini grep -oP '^ *post_max_size *= *\K.*' erl-compatible regular expressions (PCRE)
    • -oP - procure por uma linha que comece com o e P cercada por zero ou mais caracteres de espaço, remova o texto correspondido até agora da correspondência geral de expressão regular ( ^ *post_max_size *= *\K.* ) e combine tudo após
  • %código%
    • post_max_size - altera o arquivo = n lugar fazendo um backup com a extensão \K
    • sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini - na linha que começa com -i.bak , do i
    • .bak - /^ *post_max_size/… ubstitute post_max_size e tudo depois disso com
por dessert 27.12.2017 / 21:13
-1

Eu escrevi um script simples que implementa a resposta de Arkadiusz Drabczyk.

O script auto detecta a versão ativa do php.

O script assume que você está usando o apache2 (você pode passar um terceiro argumento para substituir).

Eu nomeei o arquivo php-iniset e o adicionei a um dos meus diretórios bin.

agora você pode ligar:

php-iniset post_max_size 2048M

ou ligue assim para comentar a variável:

php-iniset post_max_size

Você pode precisar ajustar coisas como o caminho de arquivo de acordo com suas necessidades

Lembre-se de fazer o backup do seu arquivo ini primeiro!

Aqui está o script:

#!/bin/bash
#
#   useage:
#   php-iniset key value
#
#   sets php ini key to value
#   if no value is supplied key will be commented
#   If value is supplied key will automatically be commented out
#
key=
val=
scope=${3:-apache2}

version='php -r "echo substr(PHP_VERSION, 0, 3);"'
filepath="/etc/php/$version/$scope/php.ini"

if [ -f $filepath ]
then
    if [ -e $val ]
    then
        #disable if value is empty
        sudo sed -i "/^$key =.*$/s/^/;/g" $filepath

        #confirm disabled
        grep "^;$key " $filepath

    else
        #enable if value has been supplied
        sudo sed -i "/^;$key =.*$/s/^;//g" $filepath

        #modify value
        sudo sed -i "s,^$key =.*$,$key = $val," $filepath

        #confirm value
        grep "^$key " $filepath
    fi

else
    echo "$path does not exist"
fi
    
por Dieter Gribnitz 05.04.2018 / 05:02