Heim > Artikel > Backend-Entwicklung > Ausführliche Erklärung, wie man die Hosts-Datei in PHP ändert
In diesem Artikel wird hauptsächlich die Methode zum Ändern der Hosts-Datei in PHP vorgestellt und die zugehörigen Lese-, Einstellungs-, Lösch- und anderen Implementierungstechniken von PHP zum Betrieb der Hosts-Datei anhand spezifischer Beispiele analysiert
Das Beispiel in diesem Artikel beschreibt die Methode zum Ändern der Hosts-Datei in PHP. Ich teile es Ihnen als Referenz mit:
Ich habe eine solche Anforderung. Ich hoffe, dass sie verschiedenen IPs zu unterschiedlichen Zeiten entspricht , diese Arbeit scheint etwas umständlich zu sein. Ich habe das folgende Skript geschrieben, um Batch-Änderungen vorzunehmen.
<?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; } }
Die Beispielkonfigurationsdatei lautet wie folgt:
# 域名 [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
Verwendung:
php hosts.php local # 域名将指向本机 127.0.0.1 php hosts.php dev # 域名将指向开发机 192.168.1.100 php hosts.php # 删除域名的 hosts 配置
Nachdem ich mit dem Schreiben fertig war, stellte ich fest, dass dies eindeutig eine Aufgabe ist, die mit nur einem Suchen und Ersetzen erledigt werden kann
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie man die Hosts-Datei in PHP ändert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!