<table cellspacing="0" cellpadding="0"><tr><td class="t_f" id="postmessage_65137"> <div class="blockcode"> <div id="code_b1s"><ol> <li> <?php <li> </li> <li> define('HOST_FILE', 'C:\Windows\System32\drivers\etc\hosts'); </li> <li> </li> <li> $hm = new HostManage(HOST_FILE); </li> <li> </li> <li> $env = $argv[1]; </li> <li> if (empty($env)) { </li> <li> $hm->delAllGroup(); </li> <li> } else { </li> <li> $hm->addGroup($env); </li> <li> } </li> <li> </li> <li> class HostManage { </li> <li> </li> <li> // hosts 文件路径 </li> <li> protected $file; </li> <li> // hosts 记录数组 </li> <li> protected $hosts = array(); </li> <li> // 配置文件路径,默认为 __FILE__ . '.ini'; </li> <li> protected $configFile; </li> <li> // 从 ini 配置文件读取出来的配置数组 </li> <li> protected $config = array(); </li> <li> // 配置文件里面需要配置的域名 </li> <li> protected $domain = array(); </li> <li> // 配置文件获取的 ip 数据 </li> <li> protected $ip = array(); </li> <li> </li> <li> public function __construct($file, $config_file = null) { </li> <li> $this->file = $file; </li> <li> if ($config_file) { </li> <li> $this->configFile = $config_file; </li> <li> } else { </li> <li> $this->configFile = __FILE__ . '.ini'; </li> <li> } </li> <li> $this->initHosts() </li> <li> ->initCfg(); </li> <li> } </li> <li> </li> <li> public function __destruct() { </li> <li> $this->write(); </li> <li> } </li> <li> </li> <li> public function initHosts() { </li> <li> $lines = file($this->file); </li> <li> foreach ($lines as $line) { </li> <li> $line = trim($line); </li> <li> if (empty($line) || $line[0] == '#') { </li> <li> continue; </li> <li> } </li> <li> $item = preg_split('/\s+/', $line); </li> <li> $this->hosts[$item[1]] = $item[0]; </li> <li> } </li> <li> return $this; </li> <li> } </li> <li> </li> <li> public function initCfg() { </li> <li> if (! file_exists($this->configFile)) { </li> <li> $this->config = array(); </li> <li> } else { </li> <li> $this->config = (parse_ini_file($this->configFile, true)); </li> <li> } </li> <li> $this->domain = array_keys($this->config['domain']); </li> <li> $this->ip = $this->config['ip']; </li> <li> return $this; </li> <li> } </li> <li> </li> <li> /** </li> <li> * 删除配置文件里域的 hosts </li> <li> */ </li> <li> public function delAllGroup() { </li> <li> foreach ($this->domain as $domain) { </li> <li> $this->delRecord($domain); </li> <li> } </li> <li> } </li> <li> </li> <li> /** </li> <li> * 将域配置为指定 ip </li> <li> * @param type $env </li> <li> * @return \HostManage </li> <li> */ </li> <li> public function addGroup($env) { </li> <li> if (! isset($this->ip[$env])) { </li> <li> return $this; </li> <li> } </li> <li> foreach ($this->domain as $domain) { </li> <li> $this->addRecord($domain, $this->ip[$env]); </li> <li> } </li> <li> return $this; </li> <li> } </li> <li> </li> <li> /** </li> <li> * 添加一条 host 记录 </li> <li> * @param type $ip </li> <li> * @param type $domain </li> <li> */ </li> <li> function addRecord($domain, $ip) { </li> <li> $this->hosts[$domain] = $ip; </li> <li> return $this; </li> <li> } </li> <li> </li> <li> /** </li> <li> * 删除一条 host 记录 </li> <li> * @param type $domain </li> <li> */ </li> <li> function delRecord($domain) { </li> <li> unset($this->hosts[$domain]); </li> <li> return $this; </li> <li> } </li> <li> </li> <li> /** </li> <li> * 写入 host 文件 </li> <li> */ </li> <li> public function write() { </li> <li> $str = ''; </li> <li> foreach ($this->hosts as $domain => $ip) { </li> <li> $str .= $ip . "\t" . $domain . PHP_EOL; </li> <li> } </li> <li> file_put_contents($this->file, $str); </li> <li> return $this; </li> <li> } </li> <li> </li> <li> } </li> </ol></div> <em onclick="copycode($('code_b1s'));">复制代码</em> </div> <br> 使用方法: <div class="blockcode"> <div id="code_bYV"><ol> <li> php hosts.php local # 域名将指向本机 127.0.0.1 </li> <li> php hosts.php dev # 域名将指向开发机 192.168.1.100 </li> <li> php hosts.php # 删除域名的 hosts 配置 </li> </ol></div> <em onclick="copycode($('code_bYV'));">复制代码</em> </div> <br> </td></tr></table> <div class="ptg mbm mtn"> hosts, PHP</div> <div id="comment_65137" class="cm"> </div> <div id="post_rate_div_65137"></div> <br><br>