スタッフブログ

  • カテゴリ TIPS小ネタ の最新配信
  • RSS

mainfile.phpをサイトごとに切り替える開発テクニック

suin : XOOPS » TIPS小ネタ 2010/11/1 17:40

Blogger's Avatar

mainfile.phpはXOOPSの設定ファイルで、XOOPSのパスやデータベースのアカウント情報などが書かれています。これらの設定情報は、当然 環境に依存しています。

開発フローを、開発→ステージング→プロダクションという流れでやる場合、同じサイトが少なくとも3つ以上できてしまいます。そうすると、mainfile.phpも複数できあがるわけです。ところが、XOOPS Cube Legacyはサイトプロフィールという概念がないため、mainfile.phpの取り扱いは悩ましいものがあります。(他のCMS、Drupalなどではあると聞いています。)

複数のmainfile.php問題を解決する方法はいくつか考えられます。

1. どの環境もそっくりの環境にする

XOOPS_ROOT_PATHなどはdirname(__FILE__)で解決し、データベースのアカウント情報はどのサーバでも共通のものにするという手法です。 ただ、この方法だとチームで開発に取り組む場合、あまりうまくいきません。SVNで管理しているサイトだと、お互いのmainfile.phpを上書きしあう心配があります。

2. mainfile.phpはSVNで管理しない

mainfile.phpは環境依存が強いため、SVNでは管理しないようにしておく方法があります。こうしておくと、チームでお互いのmainfile.phpを上書きする心配もありません。ところが、この方法では、リポジトリにmainfile.phpがないのが欠点になります。mainfile.phpが無いので、チェックアウトしてきても直ぐに動かせません。また、そのサイト全体で使われている定数をmainfile.phpに書いておくことがありますが、定数をいちいち手動で追加しなければなりません。(本来、環境依存ではない定数は、/settings/definition.phpに書くべきですが。)

そこで、今回紹介するのは、mainfile.phpをサイトごとに切り替える方法です。

まず、サイトごとのmainfile.phpを適当に名前を変更して、settingsの下に置きます。 例えば、今ローカル環境にあるmainfile.phpは開発環境なので、名前をmainfile.dev.phpに変えて、settingsに移動します。

.
├── mainfile.php
├── settings
│   ├── mainfile.dev.php
│   ├── mainfile.stag.php
│   └── mainfile.prod.php
(略)

次に、XOOPS_ROOT_PATHに空のmainfile.phpを作り、そこに下のコードをコピペします。

<?php

require XoopsProfiler::getProfile();

class XoopsProfiler
{
	// ホスト名 => ファイル名
	protected static $map = array(
		'suinasia.local' => 'mainfile.dev.php', // 開発
		'stag.suin.asia' => 'mainfile.stag.php', // ステージング
		'suin.asia'      => 'mainfile.prod.php', // プロダクション
	);

	public static function getProfile()
	{
		$xoopsRootPath = dirname(__FILE__);
		$serverName = $_SERVER['SERVER_NAME'];
		$ds = DIRECTORY_SEPARATOR;

		if ( !isset(self::$map[$serverName]) )
		{
			trigger_error("Profile not found.");
			die;
		}

		$mainfile = self::$map[$serverName];
		$path = $xoopsRootPath.$ds.'settings'.$ds.$mainfile;

		return $path;
	}

}

あとは、$map配列のところを適宜書き換えるだけです。 配列のキーはホスト名で、値はそのホストで使うmainfile.phpになります。

上のコードを少し書き換えれば、開発環境でも複数のデータベースを簡単に切り替えたり、いろいろ応用できると思います。

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.