如何通过 shell 脚本以编程方式更改 php.ini 值?

如何通过 shell 脚本以编程方式更改 php.ini 值?

基本上,我正在尝试设置一个 shell 脚本,以便我在新服务器上自动配置一些参数

具体来说,我想在 php.ini 中设置

错误日志 = /var/log/php_errors.log 错误报告 = 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

但是,这似乎不起作用,而且错误对我来说并不明显。有人可以纠正我的错误吗?

答案1

您需要将最外层的单引号更改为双引号,并删除变量名周围的单引号。

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命令,以便它与另一组平行。

我假设您收到的错误消息是“未终止的`s'命令”。

答案2

sed -i需要一个参数,用作其创建的备份文件的后缀。

例如:将在编辑原始内容之前sed -i .bak 's/old/new/' testfile创建备份。您的命令将命令字符串作为备份后缀(并且自然会失败)。testfile.bak

我还会在命令字符串中使用双引号。这样你就不用在变量扩展周围乱用额外的单引号了。

相关内容