Text-Processing

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

  • January 6, 2018

當我想更改和in的著名2M比例時,我使用以下與版本無關的兩行解決方案(請參閱星號):post_max_size``upload_max_size``php.ini``sed

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。

一種同時處理兩個參數的笨拙方法是

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_cach**e**_max_sizee
  • pos**t**_max_size       →t
  • uploa**d**_max_filesize    →d

所以,通過搜尋[td]_max_,我們可以消除第一個。

詳細命令:

  • ^當然限制正則表達式以匹配行首的出現。如果要匹配不在行首的字元串,請刪除^. 注意:除非您添加了其他內容以指定,否則這將導致命令更改被註釋掉的行,這可能會造成混淆。

  • \(…\)標識一組字元。我們將使用它來匹配直到(但包括)參數值(即,後面的數字=)的所有內容。

  • \w*[td]_max_\w*size火柴

    • 任意數量的“單詞”(字母數字)字元,
    • 一個t或一個d
    • _max_,
    • 任意數量(可能為零)的單詞字元,以及
    • size.
  • \s*=\s*再次匹配任意數量的空格字元(正常空格或製表符)、an=和任意數量的空格字元。(你不需要說\=。)

這是該組的結尾,由 標記\)

  • 如您所知,.M匹配任何後跟 . 的字元M。(你已經在使用它了。)

  • \1200M看起來很混亂,但它只是

    • \1,將\(…\)組中的字元替換為自身,
    • 後跟200M,這是您要替換的*n*M數字。

除非您希望在同一行上匹配多個字元串,否則您不需要g (如果您將正則表達式錨定到行的開頭,這是不可能的^)。

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

在執行上述操作之前,您應該執行

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

這將顯示第一個命令將執行的操作。

引用自:https://unix.stackexchange.com/questions/415117