PHPのパラメーター変更をsedコマンド一発でやるメモ

明けましておめでとうございます。とか言って、そろそろに1月が終わるところになりました。時間矢の如し、早う御座いますね。

ところでPHPのメジャーバージョン、PHP 8.0はすでにリリースされていますが、owner203はまだPHPのバージョンをアップグレードしていません。大きな変更もいくつかありますので、運用中のアプリケーションの完全対応までは、しばらく様子を見ようと思います。

さて、PHP 7.4のマイナーバージョンアップも割と頻繁にリリースされていますので、時々php.iniファイル自体の更新もあります。これは別に上書きせず、現在使用中のphp.iniファイルをそのまま維持しても構いませんが、しかし長期的で見ると、デフォルト設定の変更や説明文の更新も含まれているかもしれませんし、今までは新しいphp.iniファイルで一旦上書きして、vimなどでパラメーターを設定したい値に手動更新します。

しかし、設定したいインスタンスが多くなると、いちいち手動変更するのは大変面倒くさいことになります。なので、sedコマンドで一発でできる方法をここにメモします。使う時はコピペなりcronに追加するなり、楽になります。

設定環境

OSバージョン

Input

cat /etc/lsb-release
Output

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

PHPバージョン

Input

php -v
Output

PHP 7.4.14 (cli) (built: Jan 13 2021 00:00:00) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.14, Copyright (c), by Zend Technologies

設定ファイルの場所

#Apache版
/etc/php/7.4/apache2/php.ini

#FPM版
/etc/php/7.4/fpm/php.ini

#CLI版
/etc/php/7.4/cli/php.ini

設定したいパラメーター

#Apache版、FPM版、CLI版共通
memory_limit = 1G
post_max_size = 5G
upload_max_filesize = 5G

#CLI版のみAPCuに関する追記、APCuなしの場合は不要
[APCu]
apc.enable_cli = 1

実行用コマンド

#Apache版
sudo cp /etc/php/7.4/apache2/php.ini /etc/php/7.4/apache2/php.ini.orig && sudo sed -i 's/memory_limit = .*/memory_limit = 1G/gI' /etc/php/7.4/apache2/php.ini && sudo sed -i 's/post_max_size = .*/post_max_size = 5G/gI' /etc/php/7.4/apache2/php.ini && sudo sed -i 's/upload_max_filesize = .*/upload_max_filesize = 5G/gI' /etc/php/7.4/apache2/php.ini && diff /etc/php/7.4/apache2/php.ini.orig /etc/php/7.4/apache2/php.ini
#FPM版
sudo cp /etc/php/7.4/fpm/php.ini /etc/php/7.4/fpm/php.ini.orig && sudo sed -i 's/memory_limit = .*/memory_limit = 1G/gI' /etc/php/7.4/fpm/php.ini && sudo sed -i 's/post_max_size = .*/post_max_size = 5G/gI' /etc/php/7.4/fpm/php.ini && sudo sed -i 's/upload_max_filesize = .*/upload_max_filesize = 5G/gI' /etc/php/7.4/fpm/php.ini && diff /etc/php/7.4/fpm/php.ini.orig /etc/php/7.4/fpm/php.ini
#CLI版
sudo cp /etc/php/7.4/cli/php.ini /etc/php/7.4/cli/php.ini.orig && sudo sed -i 's/memory_limit = .*/memory_limit = 1G/gI' /etc/php/7.4/cli/php.ini && sudo sed -i 's/post_max_size = .*/post_max_size = 5G/gI' /etc/php/7.4/cli/php.ini && sudo sed -i 's/upload_max_filesize = .*/upload_max_filesize = 5G/gI' /etc/php/7.4/cli/php.ini && sudo sed -i '$a\n[APCu]\napc.enable_cli = 1' /etc/php/7.4/cli/php.ini && diff /etc/php/7.4/cli/php.ini.orig /etc/php/7.4/cli/php.ini

参考資料

sedコマンド自体の使い方などを調べるには以下のものを参考しました。

https://www.atmarkit.co.jp/ait/articles/1610/06/news021.html
https://hydrocul.github.io/wiki/commands/sed.html