本文实例讲述了PHP实现更改hosts文件的方法。分享给大家供大家参考,具体如下:
有这样一个需求,我有多个网址希望在不同的时候对应不同的 ip,如果一个个配 hosts,这工作显得有些繁琐。写了如下脚本来批量更改。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
<?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 ;
}
}
|
示例配置文件如下:
?
1
2
3
4
5
6
7
8
9
|
# 域名
[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
|
使用方法:
?
1
2
3
|
php hosts.php local # 域名将指向本机 127.0.0.1
php hosts.php dev # 域名将指向开发机 192.168.1.100
php hosts.php # 删除域名的 hosts 配置
|
写完后,发现,这明明就是只需要一次查找替换就能完成的工作嘛
希望本文所述对大家PHP程序设计有所帮助。
相关文章
猜你喜欢
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-25 54
-
2025-05-25 89
-
2025-05-25 35
-
2025-05-29 95
-
2025-05-29 37
热门评论