Назад | Перейти на главную страницу

Как программно изменить значения php.ini с помощью сценариев оболочки?

По сути, я пытаюсь настроить сценарий оболочки, который позволяет мне автоматически настраивать некоторые параметры на моих новых серверах.

В частности, я бы хотел установить в php.ini

error_log = /var/log/php_errors.log error_reporting = E_ALL & ~ E_NOTICE & ~ E_STRICT & ~ E_DEPRECATED

В моем сценарии bash у меня есть следующее:

ERROR_REPORTING="error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED"
ERROR_LOG="/var/log/php_errors.log"

#CREATE LOG FILE 
sed -i 's/error_reporting = .*/error_reporting = '${ERROR_REPORTING}'/' /etc/php.ini
touch $ERROR_LOG
chown apache:apache $ERROR_LOG
#The ; in the next line is because the line is commented by default on RHEL5
sed -i 's/;error_log = .*/error_log = '${ERROR_LOG}'/' /etc/php.ini

Однако это, похоже, не работает, и ошибка не очевидна для меня ... Кто-нибудь может исправить мою ошибку?

Вам нужно заменить крайние одинарные кавычки на двойные и удалить одинарные кавычки вокруг имен переменных.

ERROR_REPORTING="E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED"
ERROR_LOG="/var/log/php_errors.log"

#CREATE LOG FILE 
sed -i "s/error_reporting = .*/error_reporting = ${ERROR_REPORTING}/" /etc/php.ini
touch $ERROR_LOG
chown apache:apache $ERROR_LOG
#The ; in the next line is because the line is commented by default on RHEL5
sed -i "s/;error_log = .*/error_log = ${ERROR_LOG}/" /etc/php.ini

Обратите внимание, что я также изменил первую переменную и связанные с ней sed команда, поэтому она параллельна другому набору.

Я предполагаю, что вы получили сообщение об ошибке "unterminated` s 'command ".

sed -i требуется аргумент, который используется в качестве суффикса для создаваемого файла резервной копии.

Пример: sed -i .bak 's/old/new/' testfile создаст резервную копию testfile.bak перед редактированием оригинала на месте. Ваша команда принимает командную строку в качестве суффикса резервной копии (и, естественно, не работает).

Я бы также использовал двойные кавычки в командной строке. Это избавит вас от необходимости возиться с лишними одиночными кавычками вокруг расширения переменной.