Text-Processing
以安全、最小的方式更改 php.ini 上傳大小
當我想更改和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_size
→e
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.ini
glob,或任何其他文件名或文件名列表。在執行上述操作之前,您應該執行
sed -n 's/^(\w*[td]_max_\w*size\s*=\s*).M/\1200M/p'*文件名*
這將顯示第一個命令將執行的操作。