一个更改 hosts 的 PHP 脚本

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

    <?php  
       
    define('HOST_FILE', 'C:\Windows\System32\drivers\etc\hosts');  
       
    $hm = new HostManage(HOST_FILE);  
       
    $env = $argv[1];  
    if (empty($env)) {  
            $hm->delAllGroup();  
    } else {  
            $hm->addGroup($env);  
    }  
       
    class HostManage {  
       
            // hosts 文件路径  
            protected $file;  
            // hosts 记录数组  
            protected $hosts = array();  
            // 配置文件路径,默认为 __FILE__ . '.ini';  
            protected $configFile;  
            // 从 ini 配置文件读取出来的配置数组  
            protected $config = array();  
            // 配置文件里面需要配置的域名  
            protected $domain = array();  
            // 配置文件获取的 ip 数据  
            protected $ip = array();  
       
            public function __construct($file, $config_file = null) {  
                    $this->file = $file;  
                    if ($config_file) {  
                        $this->configFile = $config_file;  
                    } else {  
                        $this->configFile = __FILE__ . '.ini';  
                    }  
                    $this->initHosts()  
                            ->initCfg();  
            }  
       
            public function __destruct() {  
                    $this->write();  
            }  
       
            public function initHosts() {  
                    $lines = file($this->file);  
                    foreach ($lines as $line) {  
                            $line = trim($line);  
                            if (empty($line) || $line[0] == '#') {  
                                    continue;  
                            }  
                            $item = preg_split('/\s+/', $line);  
                            $this->hosts[$item[1]] = $item[0];  
                    }  
                    return $this;  
            }  
       
            public function initCfg() {  
                    if (! file_exists($this->configFile)) {  
                            $this->config = array();  
                    } else {  
                            $this->config = (parse_ini_file($this->configFile, true));  
                    }  
                    $this->domain = array_keys($this->config['domain']);  
                    $this->ip = $this->config['ip'];  
                    return $this;  
            }  
       
            /** 
             * 删除配置文件里域的 hosts  
             */  
            public function delAllGroup() {  
                    foreach ($this->domain as $domain) {  
                            $this->delRecord($domain);  
                    }  
            }  
       
            /** 
             * 将域配置为指定 ip 
             * @param type $env 
             * @return \HostManage 
             */  
            public function addGroup($env) {  
                    if (! isset($this->ip[$env])) {  
                            return $this;  
                    }  
                    foreach ($this->domain as $domain) {  
                            $this->addRecord($domain, $this->ip[$env]);  
                    }  
                    return $this;  
            }  
       
            /** 
             * 添加一条 host 记录 
             * @param type $ip 
             * @param type $domain 
             */  
            function addRecord($domain, $ip) {  
                    $this->hosts[$domain] = $ip;  
                    return $this;  
            }  
       
            /** 
             * 删除一条 host 记录 
             * @param type $domain 
             */  
            function delRecord($domain) {  
                    unset($this->hosts[$domain]);  
                    return $this;  
            }  
       
            /** 
             * 写入 host 文件 
             */  
            public function write() {  
                    $str = '';  
                    foreach ($this->hosts as $domain => $ip) {  
                            $str .= $ip . "\t" . $domain . PHP_EOL;  
                    }  
                    file_put_contents($this->file, $str);  
                    return $this;  
            }  
       
    }  

使用方法:
    php hosts.php local # 域名将指向本机 127.0.0.1  
    php hosts.php dev # 域名将指向开发机 192.168.1.100  
    php hosts.php # 删除域名的 hosts 配置