1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

さくらのレンタルサーバでPHPモジュールモードとCGIモードを併用する

Posted at

動機

さくらのレンタルサーバでは、スタンダードプランでも2018年4月18日以降に新たに契約したサーバでモジュールモードのPHPが使えるようになりました。
さくらのレンタルサーバ スタンダード・プレミアムにて「PHPモジュールモード」提供開始のお知らせ | さくらインターネット

基本的にはモジュールモードのほうがパフォーマンスは良いと言われますが、そうはいってもCGIモードを完全には捨てられないときがあります。

例えば、PHPの拡張モジュールを使いたい場合。
CGIモードなら、さくらのレンタルサーバであれば php.iniextension=imagick.so と1行書いておけば、それで次のリクエストから拡張モジュールが有効になりました。
しかし、モジュールモードの場合はリクエストごとにプロセスが起動するわけではありませんので、サーバを再起動しないと設定が反映されません。そして、レンタルサーバではユーザの裁量でサーバを再起動することができません。
このような場合、その機能が必要なPHPスクリプトだけをCGIモードで実行するという手が考えられます。

方法

以下のやり方の応用です。
さくらインターネットで、異なるバージョンのPHPを使う - Qiita

.htaccess
Action myphp-script /php72.cgi
AddHandler myphp-script .php
php72.cgi
#!/bin/sh
exec /usr/local/php/7.2/bin/php-cgi -d extension=imagick.so

php.iniに書ける設定を -d オプションで直接与えることができます。
これによって、.htaccess を設置したフォルダ以下にある .php のファイルはCGIモードで実行されます。

サブフォルダの中だけに適用させる場合、サブフォルダの中に .htaccess を作成します。
.htaccess の Action に指定するパスなどは適宜調整してください。

結果

以下のファイルを設置(確認が終わったら削除してください)

phpinfo.php
<?php
phpinfo();

ブラウザから https://example.com/phpinfo.php にアクセスすると、

  • Server APIが「CGI/FastCGI」になる
  • Imagickが有効になる(Imagickの設定項目が表示される)

ことが確認できます。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?