欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

一个更改 hosts 的 PHP 脚本

程序员文章站 2022-05-16 22:13:47
...
  1. define('HOST_FILE', 'C:\Windows\System32\drivers\etc\hosts');
  2. $hm = new HostManage(HOST_FILE);
  3. $env = $argv[1];
  4. if (empty($env)) {
  5. $hm->delAllGroup();
  6. } else {
  7. $hm->addGroup($env);
  8. }
  9. class HostManage {
  10. // hosts 文件路径
  11. protected $file;
  12. // hosts 记录数组
  13. protected $hosts = array();
  14. // 配置文件路径,默认为 __FILE__ . '.ini';
  15. protected $configFile;
  16. // 从 ini 配置文件读取出来的配置数组
  17. protected $config = array();
  18. // 配置文件里面需要配置的域名
  19. protected $domain = array();
  20. // 配置文件获取的 ip 数据
  21. protected $ip = array();
  22. public function __construct($file, $config_file = null) {
  23. $this->file = $file;
  24. if ($config_file) {
  25. $this->configFile = $config_file;
  26. } else {
  27. $this->configFile = __FILE__ . '.ini';
  28. }
  29. $this->initHosts()
  30. ->initCfg();
  31. }
  32. public function __destruct() {
  33. $this->write();
  34. }
  35. public function initHosts() {
  36. $lines = file($this->file);
  37. foreach ($lines as $line) {
  38. $line = trim($line);
  39. if (empty($line) || $line[0] == '#') {
  40. continue;
  41. }
  42. $item = preg_split('/\s+/', $line);
  43. $this->hosts[$item[1]] = $item[0];
  44. }
  45. return $this;
  46. }
  47. public function initCfg() {
  48. if (! file_exists($this->configFile)) {
  49. $this->config = array();
  50. } else {
  51. $this->config = (parse_ini_file($this->configFile, true));
  52. }
  53. $this->domain = array_keys($this->config['domain']);
  54. $this->ip = $this->config['ip'];
  55. return $this;
  56. }
  57. /**
  58. * 删除配置文件里域的 hosts
  59. */
  60. public function delAllGroup() {
  61. foreach ($this->domain as $domain) {
  62. $this->delRecord($domain);
  63. }
  64. }
  65. /**
  66. * 将域配置为指定 ip
  67. * @param type $env
  68. * @return \HostManage
  69. */
  70. public function addGroup($env) {
  71. if (! isset($this->ip[$env])) {
  72. return $this;
  73. }
  74. foreach ($this->domain as $domain) {
  75. $this->addRecord($domain, $this->ip[$env]);
  76. }
  77. return $this;
  78. }
  79. /**
  80. * 添加一条 host 记录
  81. * @param type $ip
  82. * @param type $domain
  83. */
  84. function addRecord($domain, $ip) {
  85. $this->hosts[$domain] = $ip;
  86. return $this;
  87. }
  88. /**
  89. * 删除一条 host 记录
  90. * @param type $domain
  91. */
  92. function delRecord($domain) {
  93. unset($this->hosts[$domain]);
  94. return $this;
  95. }
  96. /**
  97. * 写入 host 文件
  98. */
  99. public function write() {
  100. $str = '';
  101. foreach ($this->hosts as $domain => $ip) {
  102. $str .= $ip . "\t" . $domain . PHP_EOL;
  103. }
  104. file_put_contents($this->file, $str);
  105. return $this;
  106. }
  107. }
复制代码

使用方法:
  1. php hosts.php local # 域名将指向本机 127.0.0.1
  2. php hosts.php dev # 域名将指向开发机 192.168.1.100
  3. php hosts.php # 删除域名的 hosts 配置
复制代码

hosts, PHP