m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

疑問:非FuelPHPなシステムとFuelPHPなシステムを同一サーバー上に共存させる方法は?

 《疑問に思ったところをそのままメモとして掲載して、解決できたら記事に反映させる予定。同様のギモンを持った人への助けになるでしょうか。》

 稼働中のシステムに対して新しい機能をシステム化する上で、サーバーまるごとFuelPHPにするなら悩まないけど、部分的にFuelPHPのシステムを置く場合にはどうするんだろうかと。

 さらに、FuelPHPで複数システムを組む場合にはどうなるのか。書籍などを参考にサンプルコードを一旦置いてしまうと、サンプルコードが使うテンプレートをわざわざ避けるコードを足したりするのが「何かが違う」感じがする。fuel\app\classesの中やfuelphp\fuel\app\viewsを住み分けるうまいやり方を知りたい。

 公開サーバーにリリースするときはまだどうにかなりそうな気がするけど、開発中のローカルサーバーで複数案件を抱えるときにどうやってそれぞれ動くようにするんだろうか。書籍のサンプルコードも動くようにしておきたいし、Aの案件の問い合わせがあったらすぐAのシステムにアクセスしたいし。BだってCだってあるだろうし。

 ひとまずWindows 7 Pro.だからXPモードにサンプルコード用XAMPPを置いてみた。一番困らない方法。

 以下、関係ありそうな話題を以下にメモ。

●ローカルと本番で変わっちゃうケースの解決方法

  《[W] FuelPHP開発でローカルとWebで構造が変わっても対応できる小技 | Work Tool Smith [ワークツールスミス]》での解説がわかりやすい。

 元々FuelPHPに備わっている環境変数「FUEL_ENV」に動作モード(?)を示すクラス定数文字列(4種類から一つ)を決めて「.htaccess」内に書いておく。

 FuelPHPのpublic/index.phpに細工してAPPPATHやPKGPATHやCOREPATHを調整したり、エラー表示するしないの「ini_set('display_errors', 1);」も変えたり。

 カッコいい解決方法。

●単一サーバー上で複数システムを走らせる解決方法

 明快な参考例は見つけられず。

 セッション名をシステムごとに設定するべきっていうご指摘をいただいた次第。

 《FuelPHPのコアを複数のアプリで共有する方法 » とりあえず9JP》が参考になるのではないかとご指摘を頂きましたが、上記のXPモード云々をやっていたために検証するに至らず。

●余談:apacheのサービスを複数登録する方法

 《ApacheをWindowsのサービスとして登録するには - ぐらめぬ・ぜぷつぇんのはてダ》が参考になる。これによって別フォルダに配置したXAMPP(apachePHP)を個別にサービス登録して管理できるようになる。

 httpd.exeの引数として、「-n "サービス名"*1」「-f "httpd.confのフルパス"」って指定できるので「-k install」「-k uninstall」と一緒に使えばいいと。

 さらに《Windows上で複数のXAMPPを共存させる - nigauri.me》にあるように、ListenやServerNameを変える。

 もしもapachehttpd.confだけ切り換えて、同一のhttpd.exeを動かすならもう一つhttpd.conf内でPidFile指定をする。デフォルトでServerRootの下 run/httpd.pid に書き込まれるので、ファイル名が重複してしまう。複数インスタンスを立てるならhttpd.confのPidFileにそれぞれ重ならないファイル名を指定すると。参考:《Apache の設定 PidFile | 解体新書》《Apacheを複数のhttpd.confを用いてる場合の再起動 - オープンソース - 教えて!goo

*1:apacheのサービス化の際、サービス名に空白を含んでしまうと、XAMPP Control Panelからサービスの制御ができないことにあとで気づいた。