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

    PHP更改hosts文件的方法

    小云云小云云2018-01-30 10:36:27原创2046
    本文主要介绍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 配置

    写完后,发现,这明明就是只需要一次查找替换就能完成的工作嘛。

    相关推荐:

    python切换hosts文件代码示例

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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:hosts php 方法
    上一篇:Yii2框架中PHPExcel导出Excel文件方法 下一篇:PHP计算余弦相似度算法实例
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• ThinkPHP实现递归无级分类代码少_PHP• Yii实现多按钮保存与提交的方法_PHP• PHP实现通过中文字符比率来判断垃圾评论的方法_PHP• ThinkPHP视图查询详解_PHP• php中session退出登陆问题_PHP
    1/1

    PHP中文网