一個更改 hosts 的 PHP 腳本

efbb 9年前發布 | 1K 次閱讀 PHP

    <?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;  
        }  

}  </pre> 


使用方法:

    php hosts.php local # 域名將指向本機 127.0.0.1  
    php hosts.php dev # 域名將指向開發機 192.168.1.100  
    php hosts.php # 刪除域名的 hosts 配置  

 本文由用戶 efbb 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!