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

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

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

5
задан 27 December 2017 в 23:56

3 ответа

Получить:

grep '^post_max_size ' php.ini

Заменить:

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

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

cp php.ini php.ini.bak
3
ответ дан 27 December 2017 в 23:56
  • 1
    Спасибо за сообщение мне о ctrl + высокий звук + вкладка. Его более полезный ярлык. Это также дает опцию взять нас для подчеркивания штриховой линией, поле искомого текста и т.д. – Abhijit N 30 May 2012 в 12:16
  • 2
    Спасибо за сообщение мне о ctrl + высокий звук + вкладка. Его более полезный ярлык. Это также дает опцию взять нас для подчеркивания штриховой линией, поле искомого текста и т.д. – Abhijit N 30 May 2012 в 12:16
  • 3
    Спасибо за сообщение мне о ctrl + высокий звук + вкладка. Его более полезный ярлык. Это также дает опцию взять нас для подчеркивания штриховой линией, поле искомого текста и т.д. – Abhijit N 30 May 2012 в 12:16
  • 4
    Спасибо за сообщение мне о ctrl + высокий звук + вкладка. Его более полезный ярлык. Это также дает опцию взять нас для подчеркивания штриховой линией, поле искомого текста и т.д. – Abhijit N 30 May 2012 в 12:16
  • 5
    Спасибо за сообщение мне о ctrl + высокий звук + вкладка. Его более полезный ярлык. Это также дает опцию взять нас для подчеркивания штриховой линией, поле искомого текста и т.д. – Abhijit N 30 May 2012 в 12:16
  • 6
    Спасибо за сообщение мне о ctrl + высокий звук + вкладка. Его более полезный ярлык. Это также дает опцию взять нас для подчеркивания штриховой линией, поле искомого текста и т.д. – Abhijit N 30 May 2012 в 12:16

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

Распечатать 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/!ddэлита каждая строка кроме начала того post_max_size
    • s/.*= *//sзамените всем прежде = и нуль или больше пробелов после него ничем (= удаляют его),
  • <php.ini grep -oP '^ *post_max_size *= *\K.*'
    • -oP – печать only подобранные части согласующего отрезка длинной линии и использования Pсовместимые с Эрл регулярные выражения (PCRE)
    • ^ *post_max_size *= *\K.* – ищите начало строки post_max_size и = окруженный нулем или большим количеством пробелов, затем удалите текст, подобранный так далеко от полного соответствия regex (\K) и соответствуйте всему после него
  • sed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini
    • -i.bak – измените файл in место, делающее резервное копирование с расширением .bak
    • /^ *post_max_size/… – в начале строки post_max_size, сделать
    • s/=.*/= 2048M/sзамена = и все после него с = 2048M
2
ответ дан 27 December 2017 в 23:56
  • 1
    Можно ли помочь со сценарием синхронизировать всех пользователей в /etc/passwd и /etc/shadow?? – M. Ahmad Zafar 10 April 2013 в 09:57
  • 2
    Можно ли помочь со сценарием синхронизировать всех пользователей в /etc/passwd и /etc/shadow?? – M. Ahmad Zafar 10 April 2013 в 09:57
  • 3
    Можно ли помочь со сценарием синхронизировать всех пользователей в /etc/passwd и /etc/shadow?? – M. Ahmad Zafar 10 April 2013 в 09:57
  • 4
    Можно ли помочь со сценарием синхронизировать всех пользователей в /etc/passwd и /etc/shadow?? – M. Ahmad Zafar 10 April 2013 в 09:57
  • 5
    Можно ли помочь со сценарием синхронизировать всех пользователей в /etc/passwd и /etc/shadow?? – M. Ahmad Zafar 10 April 2013 в 09:57
  • 6
    Можно ли помочь со сценарием синхронизировать всех пользователей в /etc/passwd и /etc/shadow?? – M. Ahmad Zafar 10 April 2013 в 09:57

Я написал простой сценарий 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
ответ дан 27 December 2017 в 23:56

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

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