六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 380|回复: 0

切换host方案

[复制链接]

升级  24%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
12
 楼主| 发表于 2012-12-30 16:11:47 | 显示全部楼层 |阅读模式
切换host方案

<div class="postText"><div id="cnblogs_post_body">我也算孤陋寡闻,工作以前开发网站都没切换过host,也不知道这种方法。开发基于oauth2.0应用时候,被它的callback_uri害惨了。于是采用了两个应用,一个应用的callback_uri是开发环境的地址:localhost/*,一个是远程服务器的地址。想想,那时候真是傻啊。其实只需要改一改host既可以了,同一个域名,不同的ip。
来到我公司之后,用上了一个切host的工具。firefox的插件switchhost,https://addons.mozilla.org/zh-CN/firefox/addon/switchhosts/ 。有了它,有多少套host方案都不用愁了。
问题又来了,我喜欢用chrome浏览器,于是使用firefox的时候就是切换host的时候了。所以只白白打开一个firefox,我的电脑兄弟可受不起啊。偏偏chrome下面没有一个好用的插件。我懒得去写一个chrome插件。于是,一个程序员的解决方案来了:写一个控制台程序。
我写了一个php程序,专门用来改写系统的hosts文件。这个关键的实现部分是hosts文件的分组管理。写着写着我发现要实现的方法太多了,特别是管理hosts文件的部分:addRecord,deleteRecord,addGroup,deleteGroup,switchGroup,我实在是太懒了……
于是,我还是把firefox利用上了。因为我想起了这句话:“怎么会呢,就算是条内裤,一张卫生纸,都有它的用处 ...”。我把程序简化成只实现一个核心功能,替换系统的hosts文件。管理hosts文件的功能由firefox的SwitchHosts插件来实现。我找到了firefox的插件目录,下面有这些文件:

每一个.switchhosts文件就是插件里面的一个group。这样我就可以省去编写管理hosts的功能了。最后程序是这样的(急着用,所以里面有几处硬编码):

<div class="cnblogs_Highlighter"><?phpecho "************** switch host **************\n";echo "* all \n";echo "* use \n";echo "* show\n";echo "host>>";$fp = fopen("php://stdin","r");while(1){    $buffer = fgets($fp);        $buffer = trim($buffer);    if ($buffer == '')    {        echo "host>>";    }    $process = explode(" ",$buffer);    $i=0;    $cmd='';    $params = array();    foreach ($process as $element)    {        if ($i== 0)        {            $cmd = $element;        } else {            $params[]=$element;         }        $i++;    }    if ($cmd == 'exit')    {        exit();    }if ($cmd =='use'){$cmd = 'sw';}    if (function_exists($cmd))    {        call_user_func_array($cmd,$params);    }    wait();}function show(){    $dirname = '/home/rru/.mozilla/firefox/ii9q68bp.default/switchhosts';    $handle = opendir($dirname);    while( false!==($file =readdir($handle))) {        echo $file,"\n";    }    closedir($handle);}function sw($id){    $dirname = '/home/rru/.mozilla/firefox/ii9q68bp.default/switchhosts/';    $hostFileName = $dirname . $id .".switchhosts";    if (!file_exists($hostFileName))    {        echo "$hostFileName not exist.\n";        return false;    }    $dest = "/etc/hosts";    if (copy($hostFileName,$dest))    {        echo "using group $id\n";    }}function wait(){    echo 'host>>';}function store($name,$ip){    $record = array();    $record['$name'] = $ip;    json_encode($record);    $filename="host.txt";      }function all(){    echo "Show current hosts...\n";    $filename = "/etc/hosts";    $hosts = file($filename);    foreach ($hosts as $row)    {        $row = trim($row);        if (empty($row))        {            continue;        }        echo $row,"\n";    }}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表