• 技术文章 >后端开发 >php教程

    PHP更改hosts文件的方法详解

    墨辰丷墨辰丷2018-05-18 15:43:38原创1132
    这篇文章主要介绍了PHP实现更改hosts文件的方法,结合具体实例形式分析了php操作hosts文件的相关读取、设置、删除等实现技巧,需要的朋友可以参考下

    具体如下:

    有这样一个需求,我有多个网址希望在不同的时候对应不同的 ip,如果一个个配 hosts,这工作显得有些繁琐。写了如下脚本来批量更改。

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

    示例配置文件如下:

    # 域名
    [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更改hosts文件的方法

    PHP实现更改hosts文件

    PHP更改hosts文件方法介绍

    以上就是PHP更改hosts文件的方法详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:hosts php 详解
    上一篇:PHP实现脚本异步执行的方法 下一篇:PHP 实现文件锁与进程锁
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• PHP开发惯用函数和必须会的函数总结 -带例子• 那些年一行学习的PHP(一)• php如何采集或者 调用 .net开发的 webservice• php实现通过cookie换肤的方法,php实现cookie换肤_PHP教程• 浅谈php扩展imagick_PHP教程
    1/1

    PHP中文网