Я хочу изменить некоторые php.ini
(php5.6) переменные через терминал. Пример: мне нужно получить значение post_max_size
(на данный момент это 8M
), отобразить его в терминале, изменить его на 2048M
и отобразить снова.
Как я мог это сделать?
Получить:
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
Я предполагаю, что у Вас есть значения в Вашем 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/!d
– d
элита каждая строка кроме начала того post_max_size
s/.*= *//
– s
замените всем прежде =
и нуль или больше пробелов после него ничем (= удаляют его),<php.ini grep -oP '^ *post_max_size *= *\K.*'
-oP
– печать o
nly подобранные части согласующего отрезка длинной линии и использования P
совместимые с Эрл регулярные выражения (PCRE)^ *post_max_size *= *\K.*
– ищите начало строки post_max_size
и =
окруженный нулем или большим количеством пробелов, затем удалите текст, подобранный так далеко от полного соответствия regex (\K
) и соответствуйте всему после негоsed -i.bak '/^ *post_max_size/s/=.*/= 2048M/' php.ini
-i.bak
– измените файл i
n место, делающее резервное копирование с расширением .bak
/^ *post_max_size/…
– в начале строки post_max_size
, сделать …
s/=.*/= 2048M/
– s
замена =
и все после него с = 2048M
/etc/passwd
и /etc/shadow
??
– M. Ahmad Zafar
10 April 2013 в 09:57
/etc/passwd
и /etc/shadow
??
– M. Ahmad Zafar
10 April 2013 в 09:57
/etc/passwd
и /etc/shadow
??
– M. Ahmad Zafar
10 April 2013 в 09:57
/etc/passwd
и /etc/shadow
??
– M. Ahmad Zafar
10 April 2013 в 09:57
/etc/passwd
и /etc/shadow
??
– M. Ahmad Zafar
10 April 2013 в 09:57
/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