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
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?
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
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
<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
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) 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 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 …
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