MAMPでバーチャルホストのON/OFFスクリプトを作った

プロジェクトが増えてきたので、apacheのバーチャルホストの設定をON/OFFするスクリプトを作った。似たようなスクリプトは他にもあるだろうけども。

vhostコマンド

DOC_ROOTは各自変更してください。

#!/usr/bin/env php
<?php
define('CONF_ROOT', '/Applications/MAMP/conf/apache/extra/vhosts');
define('DOC_ROOT', '/Users/****/Sites');
define('FILE_TEMPL', 'httpd-vhosts-%s.conf');
define('FILE_TEMPL_DISABLED', 'httpd-vhosts-%s.conf.bak');

function show_usage($argv)
{
	echo 'Usage: ', $argv[0], ' command target', "\n";
}


function enable_conf($argv)
{
	$confname = sprintf(CONF_ROOT . '/' . FILE_TEMPL_DISABLED, $argv[2]);
	if (!is_file($confname)) {
		echo 'Error: ', $confname, 'is not existed.', "\n";
		exit(3);
	}
	$newconfname = sprintf(CONF_ROOT . '/' . FILE_TEMPL, $argv[2]);
	$ret = rename($confname, $newconfname);
	if (!$ret) {
		echo 'Error: rename error', "\n";
		exit(4);
	}
}

function disable_conf($argv)
{
	$confname = sprintf(CONF_ROOT . '/' . FILE_TEMPL, $argv[2]);
	if (!is_file($confname)) {
		echo 'Error: ', $confname, 'is not existed.', "\n";
		exit(3);
	}
	$newconfname = sprintf(CONF_ROOT . '/' . FILE_TEMPL_DISABLED, $argv[2]);
	$ret = rename($confname, $newconfname);
	if (!$ret) {
		echo 'Error: rename error', "\n";
		exit(4);
	}
}

function list_proj()
{
	$files = sprintf(CONF_ROOT . '/' . FILE_TEMPL, '*');;
	$files_enabled = glob($files);
	$files = sprintf(CONF_ROOT . '/' . FILE_TEMPL_DISABLED, '*');;
	$files_disabled = glob($files);

	if (is_array($files_enabled) && is_array($files_enabled)) {
		$files = array_merge($files_enabled, $files_disabled);
	}
	if (is_array($files_enabled) && !is_array($files_disabled)) {
		$files = $files_enabled;
	}
	if (!is_array($files_enabled) && is_array($files_disabled)) {
		$files = $files_disabled;
	}
	sort($files);
	foreach ($files as $index => $file) {
		$search = array(
			'httpd-vhosts-',
			'.conf',
			'.bak'
		);
		$replace = array('', '', '');
		$proj = str_replace($search, $replace, basename($file));
		$finfo = pathinfo($file);
		if ($finfo['extension'] === 'bak') {
			echo $proj, " OFF\n";
		} else {
			echo $proj, " ON\n";
		}
	}
}

if (count($argv) === 2 && $argv[1] === 'list') {
	list_proj();
	exit(0);
}
if (count($argv) !== 3) {
	show_usage($argv);
	exit(1);
}

switch ($argv[1]) {
	case 'on' :
	case 'enable' : {
		enable_conf($argv);
		break;
	}
	case 'off':
	case 'disable': {
		disable_conf($argv);
		break;
	}
	default: {
		echo 'Error: ', $argv[1], ' is not defined.', "\n";
		show_usage($argv);
		exit(2);
	}
}
list_proj();

httpd-vhosts.conf

各VirtualHostディレクティブをhttpd-vhosts-%s.confなファイル名に分けます。んで、CONF_ROOTに突っ込みます。vhostsディレクトリを作って、ごちゃごちゃにならないように一応分けてます。
んで、本体のhttpd-vhosts.confは末尾に以下を追加します。

Include /Applications/MAMP/conf/apache/extra/vhosts/httpd-vhosts-*.conf

使い方

$ vhost command target

commandはon(もしくはenable)、off(もしくはdisable)。listコマンドでプロジェクトの一覧を表示します。

$ vhost list
proj1 OFF
proj2 ON
$ vhost  on proj1
proj1 ON
proj2 ON
$ vhost  off proj2
proj1 ON
proj2 OFF

apacheの再起動を忘れずに。
※mod-myvhost/mod_vdbhなどもあるようです。