以安全、最小的方式更改 php.ini 上传大小

以安全、最小的方式更改 php.ini 上传大小

当我想更改和in 的著名2M比例时,我使用以下与版本无关的两行解决方案(请参见星号):post_max_sizeupload_max_sizephp.inised

sed -i 's/post_max_size \= .M/post_max_size \= 200M/g'             /etc/php/*/fpm/php.ini
sed -i 's/upload_max_filesize \= .M/upload_max_filesize \= 200M/g' /etc/php/*/fpm/php.ini

是否有更短、更简约的方法来在单个命令中执行相同的两个对象更改?仍然安全且与版本无关的东西。

我使用 Nginx 作为 Web 服务器。

答案1

同时执行两个参数的一种笨拙方法是

sed -i 's/^(\w*[td]_max_\w*size\s*=\s*).M/\1200M/'文件名

首先,根据这个php.ini 指令列表_max_,包含并以 结尾的关键字只有三个size

  • imlib2.font_cache_max_size
  • post_max_size
  • upload_max_filesize

请注意,紧接在 之前的字母_max_ 在每种情况下都不同:

  • imlib2.font_cache_max_sizee
  • post_max_size       →t
  • upload_max_filesize    →d

所以,通过搜索[td]_max_,我们可以消除第一个。

详细命令:

  • ^当然,限制正则表达式匹配行开头的匹配项。如果要匹配不在行开头的字符串,请删除^.注意:除非您添加其他内容来指定,否则这将导致命令更改注释掉的行,这可能会令人困惑。
  • \(…\)标识一组字符。我们将使用它来匹配所有内容(但是不是包括)参数值(即 后面的数字=)。
  • \w*[td]_max_\w*size火柴
    • 任意数量的“单词”(字母数字)字符,
    • 一个t或一个d,
    • _max_,
    • 任意数量(可能为零)的单词字符,以及
    • size
  • \s*=\s*匹配任意数量的空格字符(常规空格或制表符)、一个=,以及任意数量的空格字符。(您不需要说\=。)

    这是该组的结尾,以 标记\)

  • 如您所知,.M匹配 后跟的任何字符M。 (你已经在使用这个了。)
  • \1200M看起来很混乱,但这只是
    • \1,将组中的字符替换\(…\)为自身,
    • 后面跟着200M,这是您想要替换nM数字的内容。

g 除非您希望匹配同一行上的多个字符串(如果您使用 将正则表达式锚定到行的开头,则这是不可能的^),否则不需要。

代替filename(s)与您的/etc/php/*/fpm/php.iniglob 或任何其他文件名或文件名列表。

在执行上述操作之前,您应该运行

sed -n 's/^(\w*[td]_max_\w*size\s*=\s*).M/\1200M/p'文件名
这将显示第一个命令将执行的操作。

相关内容