解放区在住氷翠 緑の閃光
【解放区在住氷翠】氷翠のお気楽日記

さくらインターネットでバージョンの違うPHPを動かしたい

2018-07-19

氷翠です。

しばらくネタがなくて。。。

でも今日はあるよ〜

そう、仕事の話だが。

現在、仕事の関係でさくらインターネットを利用しています。あ、この解放区はロリポップだけどね。
で、PHPのバージョンは5.6を利用しています。
ところが、PHPの本家ではすでに7.3のアルファ版がリリースされたようで、さくらインターネットではPHP4.4、5シリーズと過去の遺物扱いになりつつある。ということは、バージョンが使えなくなる可能性だってあるわけで、それと同時に、サポート終了ということで、今後アップデートはされなくなり、脆弱性が修正されなくなるということ。

さくらインターネットでは7.1が今年の11月でサポート終了とかすでにそんな警告まで出ている始末。
つまり書いてはいないが、7.2が推奨ってことなんじゃないだろうか?

現在稼働しているサイト、PHPのバージョンアップによる弊害はどの程度なのか、検証したいところだが、どうせやるならいろんなものをバージョンアップさせたいじゃないですか。

で、現在氷翠のmacは最新の状態でローカルであればPHP7.1で稼働させることはできる。
しかし、7.2ではないのです。

せっかくなので、デザインも若干の修正をしていきたいところで。

だとすると、パソコンだけで確認するのはナンセンス。
iPhoneとかでも確認をしていきたい。

もっとも効率のいいのは、やはりサーバー上でテスト環境を作ることでしょう。

しかし、PHPのバージョンの変更は一つのドメインに対して一つのバージョンという仕様。サブドメインを設定したところで、同じバージョンなのです。
ロリポップはサブドメインでも別のバージョンを設定することができるので、非常にありがたいのですが、さくらインターネットはそうはいかない。

で、調べた結果、数は少ないけど、やはり同じことを考えた人がいたようです。

しかし、意味がよくわからなかった。。。

とにかくやってみるしかない。

「さあ、実験をはじめよう。」(ボトルは振りません)

今回はサブドメインを用意するのではなく、純粋に専用のディレクトリを用意しました。

「dummy」というディレクトリ。
必要なのはこの中に2つのファイルを作成します。

  • .htaccess
  • php.cgi

この2つです。とりあえず、何も考えずにこれを用意します。

.htaccessの中には

Action myphp-script /php.cgi
AddHandler myphp-script .php .html

これをコピーして使います。
1行目の後ろの方の「/php.cgi」はファイルパスをきちんと定義してあげないと動作しないので、今回は「/dummy/php.cgi」とします。
ここで氷翠が疑問に思ったのは、さくらインターネットは「www」の中がWEBページのドキュメントルートであって、サーバー上のルートはこの一つ上の階層だということ。
どうやら、「www」は飛ばしてもいいようだ。いろいろとやってみたが、結局「www」はいらなかった。

では次にphp.cgiの方を編集します。

#!/bin/sh
exec /usr/local/php/7.2/bin/php-cgi

これだけ。

またもや2行で終了ですが、この2行目の7.2という数字のところをさくらインターネットで使用できるバージョンの数字にしてあげれば、どのバージョンでも大丈夫なようだ。

さて、ここでまたもや疑問だが、さくらインターネットでは「cgiモード」と「モジュールモード」が存在する。
モジュールモードはWEBサーバーが起動するときに、その機能の一部として機能するため、動作が非常に早い。それに引き換え、cgiモードはプログラムを実行するときにPHPの本体が呼び出され、実行されるため、若干遅延が発生するようだ。まぁ、人間の感覚ではよくわからないかもしれない。ものすごく大きなプログラムであればその違いに気づくことができるかもしれないが。
では今回のこれはどっちのモードだろうか?
現在稼働しているサイトは「モジュールモード」で稼働している。それに対して、このやり方は「cgiモード」で稼働するようだ。
上の「php.cgi」の中身をみたらわかるかと思うが、perlのファイルのような書き方をしているのがわかる。

これが「CommonGatewayInterface」略して「CGI」というものだ。

まぁそこはどうでもいいのだけど。

ここまでで準備はできた。

そう、氷翠は「php.cgi」の中にプログラムを書き込んでいくのかと思っていた。
違った…orz

試しに「phpinfo()」の関数を書き込んだ「index.php」を置いてみた。

動いてくれなかった。

やはりだめなのかと思ったのだが、もう一つやらないといけないことがあったのだ。
「php.cgi」のファイルに対してパーミッションを設定しないといけない。
番号は「705」になるように設定する。

ではもう一度アクセスしてみよう。

できたよ!

PHPの情報が表示される関数が実行されたようで、情報が表示されている!

そして、きちんとPHP7.2の文字が見えました!

実際にテストしていくデータをアップロードして、トップページに関する設定ファイルがあるので、これをいじって、トップページにアクセスしてみると…
きちんと表示された!

これで作業が進む!

コメントを残す

メールアドレスが公開されることはありません。