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などもあるようです。