動機
さくらのレンタルサーバでは、スタンダードプランでも2018年4月18日以降に新たに契約したサーバでモジュールモードのPHPが使えるようになりました。
さくらのレンタルサーバ スタンダード・プレミアムにて「PHPモジュールモード」提供開始のお知らせ | さくらインターネット
基本的にはモジュールモードのほうがパフォーマンスは良いと言われますが、そうはいってもCGIモードを完全には捨てられないときがあります。
例えば、PHPの拡張モジュールを使いたい場合。
CGIモードなら、さくらのレンタルサーバであれば php.ini
に extension=imagick.so
と1行書いておけば、それで次のリクエストから拡張モジュールが有効になりました。
しかし、モジュールモードの場合はリクエストごとにプロセスが起動するわけではありませんので、サーバを再起動しないと設定が反映されません。そして、レンタルサーバではユーザの裁量でサーバを再起動することができません。
このような場合、その機能が必要なPHPスクリプトだけをCGIモードで実行するという手が考えられます。
方法
以下のやり方の応用です。
さくらインターネットで、異なるバージョンのPHPを使う - Qiita
Action myphp-script /php72.cgi
AddHandler myphp-script .php
#!/bin/sh
exec /usr/local/php/7.2/bin/php-cgi -d extension=imagick.so
php.iniに書ける設定を -d オプションで直接与えることができます。
これによって、.htaccess を設置したフォルダ以下にある .php のファイルはCGIモードで実行されます。
サブフォルダの中だけに適用させる場合、サブフォルダの中に .htaccess を作成します。
.htaccess の Action に指定するパスなどは適宜調整してください。
結果
以下のファイルを設置(確認が終わったら削除してください)
<?php
phpinfo();
ブラウザから https://example.com/phpinfo.php
にアクセスすると、
- Server APIが「CGI/FastCGI」になる
- Imagickが有効になる(Imagickの設定項目が表示される)
ことが確認できます。