>  기사  >  백엔드 개발  >  PHP에서 호스트 파일을 변경하는 방법 소개

PHP에서 호스트 파일을 변경하는 방법 소개

巴扎黑
巴扎黑원래의
2017-08-15 09:48:512274검색

이 글에서는 주로 PHP에서 호스트 파일을 변경하는 방법을 소개하고, 호스트 파일을 운용하는 PHP의 관련 읽기, 설정, 삭제 및 기타 구현 기술을 구체적인 예시로 분석해 도움이 필요한 친구들이 참고할 수 있습니다

이 기사의 예제에서는 PHP에서 호스트 파일을 변경하는 방법을 구현하는 방법을 설명합니다. 참고용으로 공유합니다.

이러한 요구사항이 있는데, 서로 다른 시간에 서로 다른 IP에 대응하고 싶은 URL이 여러 개 있습니다. 조금 번거롭습니다. 일괄 변경을 위해 다음 스크립트를 작성했습니다.


<?php
define(&#39;HOST_FILE&#39;, &#39;C:\Windows\System32\drivers\etc\hosts&#39;);
$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__ . &#39;.ini&#39;;
    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__ . &#39;.ini&#39;;
        }
        $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] == &#39;#&#39;) {
                continue;
            }
            $item = preg_split(&#39;/\s+/&#39;, $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[&#39;domain&#39;]);
        $this->ip = $this->config[&#39;ip&#39;];
        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 = &#39;&#39;;
        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=1
c.example.com=1
# ip 记录
[ip]
local=127.0.0.1
dev=192.168.1.100

사용 방법:


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

작성해 보니 분명 검색과 교체가 한 번이면 되는 작업이라는 걸 알았습니다

위 내용은 PHP에서 호스트 파일을 변경하는 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.