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