PHP达成转移hosts文件的章程身体力行,IP并机关修改hosts文件

By admin in 编程 on 2019年7月23日

摘要:上传大于8M的文本要求修改php的陈设才足以生效。不过自身在英特网找了一群修改配置的材质,不过本人修改现在正是从未奏效。

庸俗中竟然又找到个php版本的抓取google
hosts的文书,试了下还是能够用,ping了下ip,延迟亦不是非常高,网页打开测量检验了下速度也非常快,我们有意思味的话可以试试.

本文实例陈述了PHP完毕转移hosts文件的不二诀窍。分享给我们供我们参照他事他说加以考察,具体如下:

竭泽而渔办法:

自动更新hosts文件, 不掩盖已存在的记录,方便使用,不用每一趟都
复制->张开hosts文件->粘贴。

有与上述同类二个必要,作者有五个网址希望在差异的时候对应不一致的 ip,假若三个个配
hosts,那职业显得略微麻烦。写了之类脚本来批量改换。

修改php.ini那些选项,英特网有那些的科目,能够随意搜。
1、先用root账号,登录到nobody的账户。
2、然后用whereis
php命令查看,php.ini所在的地方,修改那个php.ini的文本就能够了。
3、最终重启apache,就足以生效了。

php文件:

<?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;
    }
}

这里的nobody账户便是apache使用的账户,权限相当低。
此间关键注意的标题就是您改改的布局文件必须是nobody所使用的安顿文件。
诚如景观下,修改了布置可是未有生效,能够考虑一下机器上是否有多份配置。

<?php
/**
 * 免翻墙上google
 * @author 自娱自乐自逍遥 <wapznw@gmail.com>
 * Date: 2015/2/6
 * Time: 11:42
*/

define('START_TAG','#google-hosts-2015');
define('END_TAG','#google-hosts-2015-end');
if(!empty($argv[1])){
 $params = array();
 parse_str($argv[1], $params);
if(isset($params['url'])){
 define('GOOGLE_HOST_URL', $params['url']);
}
if(isset($params['del'])){
define('DELETE_GOOGLE_HOST',true);
}
}
defined('GOOGLE_HOST_URL') || define('GOOGLE_HOST_URL', 'http://www.360kb.com/kb/2_150.html');

if(PHP_OS == 'WINNT'){
 define('HOSTS_FILE_PATH', 'C:WindowsSystem32driversetchosts');
}else if(in_array(PHP_OS, array('Linux','Darwin','FreeBSD','OpenBSD','WIN32','Windows','Unix'))){
 define('HOSTS_FILE_PATH', '/etc/hosts');
}else{
 die('Unsupported system!'.PHP_EOL);
}

if(!is_writable(HOSTS_FILE_PATH)){
 die('Without permission, please use the root user to perform!'.PHP_EOL);
}

$hosts = file_get_contents(HOSTS_FILE_PATH);

$startPos = strpos($hosts, START_TAG);
if(!defined('DELETE_GOOGLE_HOST')){
 $gs = get_google_hosts();
 echo GOOGLE_HOST_URL.PHP_EOL;
 echo $gs.PHP_EOL;
}else{
 $gs = '';
 echo 'reset hosts'.PHP_EOL;
}

if($startPos){
 $_tmp = substr($hosts, $startPos, strpos($hosts, END_TAG) - $startPos + strlen(END_TAG));
 $hosts = str_replace($_tmp,$gs,$hosts);
}else{
 $hosts.= PHP_EOL.$gs;
}

$old_file_size = filesize(HOSTS_FILE_PATH);

if(file_put_contents(HOSTS_FILE_PATH, $hosts)){
 die('success. '.PHP_EOL);
}else{
die('fail'.PHP_EOL);
}

function get_google_hosts(){
 $html = file_get_contents(GOOGLE_HOST_URL);
 $html = strip_tags($html);
 $startPos = strpos($html, START_TAG);
 $html = substr($html, $startPos, strpos($html,END_TAG) - $startPos);
 $html = str_replace(' ',' ',$html);
 return $html.PHP_EOL.END_TAG;
}

示范配置文件如下:

附:
《与公事上传有关的php配置参数》

你只怕感兴趣的稿子:

  • php Rename
    更动文件、文件夹名称
  • php退换目录及子目录下全体的文书后缀扩展名的代码
  • php更换目录及子目录下具有的文书后缀的代码
  • php.ini修改php上传文件大小限制的法子详解
  • php中布署文件操作
    如config.php文件的读取修改等操作
  • 修改apache配置文件去除thinkphp
    url中的index.php
  • 修改php.ini不见效难点一挥而就方法(上传大于8M的文书)
  • php修改钦命文件后缀的办法
  • php读取excel文件示例分享(更新修改excel)
  • PHP完结转移hosts文件的措施现身说法
# 域名
[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达成抓取谷歌IP并机关修改hosts文件
  • php Rename
    更换文件、文件夹名称
  • php改动目录及子目录下具有的文本后缀扩充名的代码
  • php退换目录及子目录下全体的文书后缀的代码
  • php.ini修改php上传文件大小限制的法子详解
  • php中配备文件操作
    如config.php文件的读取修改等操作
  • 修改apache配置文件去除thinkphp
    url中的index.php
  • php修改钦命文件后缀的不二等秘书籍
  • php读取excel文件示例分享(更新修改excel)
  • PHP实现转移hosts文件的点子亲自去做

利用办法:

php hosts.php local # 域名将指向本机 127.0.0.1
php hosts.php dev # 域名将指向开发机 192.168.1.100
php hosts.php # 删除域名的 hosts 配置

写完后,开掘,那鲜明正是只必要三遍找寻替换就能够到位的干活嘛

越多关于PHP相关内容感兴趣的读者可查阅本站专题:《php文件操作总括》、《PHP互连网编制程序工夫总括》、《php面向对象程序设计入门教程》、《php字符串(string)用法总括》、《php+mysql数据库操作入门教程》及《php常见数据库操作技艺汇总》

梦想本文所述对大家PHP程序设计有着援助。

您恐怕感兴趣的稿子:

  • PHP完成抓取谷歌(Google)IP并活动修改hosts文件
  • php Rename
    退换文件、文件夹名称
  • php更换目录及子目录下有所的公文后缀增加名的代码
  • php更换目录及子目录下具有的公文后缀的代码
  • php.ini修改php上传文件大小限制的方式详解
  • php中配置文件操作
    如config.php文件的读取修改等操作
  • 修改apache配置文件去除thinkphp
    url中的index.php
  • 修改php.ini不奏效难点化解措施(上传大于8M的文本)
  • php修改钦命文件后缀的方法
  • php读取excel文件示例共享(更新修改excel)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 澳门新葡亰官网app 版权所有