【问题标题】:Change php.ini values from shell script从 shell 脚本更改 php.ini 值
【发布时间】:2014-04-17 03:32:55
【问题描述】:

我是 shell 脚本的新手。我正在运行 Vagrant,发现自己需要在 php.ini 中调整这些设置:

upload_max_filesize 120M
post_max_size 120M
max_execution_time 200
max_input_time 200

如何将这些添加到 shell 脚本中,以便在第一次 vagrant up 时配置我的机器?

【问题讨论】:

  • 我过去曾为此使用过sed

标签: php shell vagrant


【解决方案1】:

使用以下脚本,您可以轻松调整 php.ini 值。每次只需要更新前 4 行。

确保您的 sed 命令支持 -i 选项。

#!/usr/bin/env bash

upload_max_filesize=240M
post_max_size=50M
max_execution_time=100
max_input_time=223

for key in upload_max_filesize post_max_size max_execution_time max_input_time
do
 sed -i "s/^\($key\).*/\1 $(eval echo = \${$key})/" php.ini
done

【讨论】:

  • 请多说几句。很多人不想只是复制粘贴而不了解。请问如何理解这个s/^\($key\).*/\1 $(eval echo \${$key})/
  • 很高兴了解这是如何工作的
  • 感谢@BMW。就我而言,我做了sudo sed -i "s/^\($key\).*/\1 $(eval echo \${$key})/" /etc/php5/apache2/php.ini
  • 我还为正确的 php.ini 语法添加了一个等号:sudo sed -i "s/^\($key\).*/\1 = $(eval echo \${$key})/" /etc/php5/apache2/php.ini
  • 使用带后缀的 sed -i 创建备份文件,以确保:sed -i.bak "s/^\($key\).*/\1 $(eval echo \${$key})/" php.ini 将创建 php.ini.bak
【解决方案2】:

有一个用于此目的的shell脚本https://github.com/StanAngeloff/vagrant-shell-scripts#php

php-settings-update(name, value)

更新 PHP 设置值。此函数将查找所有 php.ini /etc 中的文件对于每个文件,将创建一个 conf.d 目录 父目录(如果尚不存在)和文件内 将放置指定设置名称/值。

示例(创建默认时区):

php-settings-update 'date.timezone' 'Europe/London'

【讨论】: