Как получить и установить переменные php.ini через терминал

Я хочу изменить некоторые переменные php.ini (php5.6) через терминал. Пример: Мне нужно получить значение post_max_size (это пока 8M), отобразить его в терминале, изменить его на 2048M и отобразить его снова.

Как я мог это сделать ?

2
задан 28 December 2017 в 00:56

9 ответов

Get:

grep '^post_max_size ' php.ini

Заменить:

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

Обратите внимание, что перед запуском sed рекомендуется создать резервную копию php.ini: [!d2 ]

cp php.ini php.ini.bak
3
ответ дан 22 May 2018 в 15:54
  • 1
    Вы также можете создать резервную копию с помощью sed, например, для .bak используйте sed -i.bak …. – dessert 27 December 2017 в 22:47

Get:

grep '^post_max_size ' php.ini

Заменить:

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

Обратите внимание, что перед запуском sed рекомендуется создать резервную копию php.ini:

cp php.ini php.ini.bak
3
ответ дан 18 July 2018 в 00:21

Get:

grep '^post_max_size ' php.ini

Заменить:

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

Обратите внимание, что перед запуском sed рекомендуется создать резервную копию php.ini:

cp php.ini php.ini.bak
3
ответ дан 24 July 2018 в 17:12

Я предполагаю, что у вас есть значения в вашем php.ini, хранящиеся по одному в каждой строке и разделенные = с окружающими пространствами или без них. Ни имена переменных, ни значения не содержат =.

Чтобы напечатать значение post_max_size (выберите одно):

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

В напечатать [!d2 ] значение post_max_size до 2048M, создающее резервную копию под названием php.ini.bak:

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

Пояснения

<php.ini awk -F"= *" '/^ *post_max_size/{print$2}' <php.ini - открыть оболочку php.ini и назначить его на stdin программы, это имеет ряд преимуществ, см. здесь -F"= *" - установите =, за которым следуют ноль или более символов пробела в качестве разделителя полей /^ *post_max_size/{print$2} - из строки, начинающейся с поля печати post_max_size 2 <php.ini sed '/^ *post_max_size/!d;s/.*= *//' /^ *post_max_size/!d - d elete каждая строка, кроме той, которая начинается с post_max_size s/.*= *// - s, оставляет все до = и ноль или более символов пробела после него ничем (= удалить it) <php.ini grep -oP '^ *post_max_size *= *\K.*' -oP - напечатайте o согласованные части соответствующей строки и используйте P erl-совместимые регулярные выражения (PCRE) ^ *post_max_size *= *\K.* - найдите строку, начинающуюся с post_max_size и =, окруженный нулевым или большим количеством символов пробела, затем удалите текст, сопоставленный так далеко от общего соответствия регулярному выражению (\K) и сопоставьте ev erything after it sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini -i.bak - измените файл i n, сделав резервную копию с расширением .bak /^ *post_max_size/… - в строке, начинающейся с post_max_size, выполните … s/=.*/= 2048M/ - s ubstitute = и все после него с помощью = 2048M
1
ответ дан 22 May 2018 в 15:54
  • 1
    Добро пожаловать. Да, \K супер полезен - более гибкий, чем положительный lookbehind, потому что шаблон не должен быть фиксированной длиной. – wjandrea 28 December 2017 в 03:01

Я написал простой скрипт bash, который реализует ответ Аркадуша Драбчика.

Скрипт автоматически обнаруживает активную версию php.

Сценарий предполагает, что вы используете apache2 (вы можете пройти третий аргумент для переопределения).

Я назвал файл php-iniset и добавил его в один из моих каталогов bin.

теперь вы можете позвонить:

php-iniset post_max_size 2048M

или вызвать его так, чтобы прокомментировать переменную:

php-iniset post_max_size

Возможно, вам понадобится настроить такие вещи, как путь к файлам, вашим потребностям

Не забудьте сначала создать резервную копию своего ini-файла !

Вот сценарий:

#!/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=$1
val=$2
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
-1
ответ дан 22 May 2018 в 15:54
  • 1
    Этот сценарий имеет несколько проблем: разворачивание без кавычек, неправильное использование test -e, переменной typo ($path вместо $filepath) и проверка того, существует ли файл, должно быть предложение guard, которое, если оно не выполнено, должно выйти с отличное от нуля. Также вы захотите использовать новый синтаксис подстановки команд $(...) вместо старого (backticks). – wjandrea 5 April 2018 в 07:33

Я предполагаю, что у вас есть значения в вашем php.ini, хранящиеся по одному в каждой строке и разделенные = с окружающими пространствами или без них. Ни имена переменных, ни значения не содержат =.

Чтобы напечатать значение post_max_size (выберите одно):

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

В напечатать значение post_max_size до 2048M, создающее резервную копию под названием php.ini.bak:

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

Пояснения

<php.ini awk -F"= *" '/^ *post_max_size/{print$2}' <php.ini - открыть оболочку php.ini и назначить его на stdin программы, это имеет ряд преимуществ, см. здесь -F"= *" - установите =, за которым следуют ноль или более символов пробела в качестве разделителя полей /^ *post_max_size/{print$2} - из строки, начинающейся с поля печати post_max_size 2 <php.ini sed '/^ *post_max_size/!d;s/.*= *//' /^ *post_max_size/!d - d elete каждая строка, кроме той, которая начинается с post_max_size s/.*= *// - s, оставляет все до = и ноль или более символов пробела после него ничем (= удалить it) <php.ini grep -oP '^ *post_max_size *= *\K.*' -oP - напечатайте o согласованные части соответствующей строки и используйте P erl-совместимые регулярные выражения (PCRE) ^ *post_max_size *= *\K.* - найдите строку, начинающуюся с post_max_size и =, окруженный нулевым или большим количеством символов пробела, затем удалите текст, сопоставленный так далеко от общего соответствия регулярному выражению (\K) и сопоставьте ev erything after it sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini -i.bak - измените файл i n, сделав резервную копию с расширением .bak /^ *post_max_size/… - в строке, начинающейся с post_max_size, выполните … s/=.*/= 2048M/ - s ubstitute = и все после него с помощью = 2048M
1
ответ дан 18 July 2018 в 00:21

Я написал простой скрипт bash, который реализует ответ Аркадуша Драбчика.

Скрипт автоматически обнаруживает активную версию php.

Сценарий предполагает, что вы используете apache2 (вы можете пройти третий аргумент для переопределения).

Я назвал файл php-iniset и добавил его в один из моих каталогов bin.

теперь вы можете позвонить:

php-iniset post_max_size 2048M

или вызвать его так, чтобы прокомментировать переменную:

php-iniset post_max_size

Возможно, вам понадобится настроить такие вещи, как путь к файлам, вашим потребностям

Не забудьте сначала создать резервную копию своего ini-файла !

Вот сценарий:

#!/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=$1 val=$2 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
-1
ответ дан 18 July 2018 в 00:21

Я предполагаю, что у вас есть значения в вашем php.ini, хранящиеся по одному в каждой строке и разделенные = с окружающими пространствами или без них. Ни имена переменных, ни значения не содержат =.

Чтобы напечатать значение post_max_size (выберите одно):

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

В напечатать значение post_max_size до 2048M, создающее резервную копию под названием php.ini.bak:

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

Пояснения

<php.ini awk -F"= *" '/^ *post_max_size/{print$2}' <php.ini - открыть оболочку php.ini и назначить его на stdin программы, это имеет ряд преимуществ, см. здесь -F"= *" - установите =, за которым следуют ноль или более символов пробела в качестве разделителя полей /^ *post_max_size/{print$2} - из строки, начинающейся с поля печати post_max_size 2 <php.ini sed '/^ *post_max_size/!d;s/.*= *//' /^ *post_max_size/!d - d elete каждая строка, кроме той, которая начинается с post_max_size s/.*= *// - s, оставляет все до = и ноль или более символов пробела после него ничем (= удалить it) <php.ini grep -oP '^ *post_max_size *= *\K.*' -oP - напечатайте o согласованные части соответствующей строки и используйте P erl-совместимые регулярные выражения (PCRE) ^ *post_max_size *= *\K.* - найдите строку, начинающуюся с post_max_size и =, окруженный нулевым или большим количеством символов пробела, затем удалите текст, сопоставленный так далеко от общего соответствия регулярному выражению (\K) и сопоставьте ev erything after it sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini -i.bak - измените файл i n, сделав резервную копию с расширением .bak /^ *post_max_size/… - в строке, начинающейся с post_max_size, выполните … s/=.*/= 2048M/ - s ubstitute = и все после него с помощью = 2048M
1
ответ дан 24 July 2018 в 17:12
  • 1
    Добро пожаловать. Да, \K супер полезен - более гибкий, чем положительный lookbehind, потому что шаблон не должен быть фиксированной длиной. – wjandrea 28 December 2017 в 03:01

Я написал простой скрипт bash, который реализует ответ Аркадуша Драбчика.

Скрипт автоматически обнаруживает активную версию php.

Сценарий предполагает, что вы используете apache2 (вы можете пройти третий аргумент для переопределения).

Я назвал файл php-iniset и добавил его в один из моих каталогов bin.

теперь вы можете позвонить:

php-iniset post_max_size 2048M

или вызвать его так, чтобы прокомментировать переменную:

php-iniset post_max_size

Возможно, вам понадобится настроить такие вещи, как путь к файлам, вашим потребностям

Не забудьте сначала создать резервную копию своего ini-файла !

Вот сценарий:

#!/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=$1 val=$2 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
-1
ответ дан 24 July 2018 в 17:12
  • 1
    Этот сценарий имеет несколько проблем: разворачивание без кавычек, неправильное использование test -e, переменной typo ($path вместо $filepath) и проверка того, существует ли файл, должно быть предложение guard, которое, если оно не выполнено, должно выйти с отличное от нуля. Также вы захотите использовать новый синтаксис подстановки команд $(...) вместо старого (backticks). – wjandrea 5 April 2018 в 07:33

Другие вопросы по тегам:

Похожие вопросы: