PHP更改hosts檔案的方法詳解

來源:互聯網
上載者:User
這篇文章主要介紹了PHP實現更改hosts檔案的方法,結合具體執行個體形式分析了php操作hosts檔案的相關讀取、設定、刪除等實現技巧,需要的朋友可以參考下

具體如下:

有這樣一個需求,我有多個網址希望在不同的時候對應不同的 ip,如果一個個配 hosts,這工作顯得有些繁瑣。寫了如下指令碼來批量更改。

<?phpdefine('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;    }}

樣本設定檔如下:

# 網域名稱[domain]a.example.com=1 # 請無視這個 =1,因為使用了 parse_ini_file 這個函數來解析,如果後面不帶值,就擷取不到這條記錄了b.example.com=1c.example.com=1# ip 記錄[ip]local=127.0.0.1dev=192.168.1.100

使用方法:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.