Maison  >  Article  >  développement back-end  >  一个更改 hosts 的 PHP 脚本

一个更改 hosts 的 PHP 脚本

WBOY
WBOYoriginal
2016-07-25 08:43:28890parcourir
  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


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn