由于单位内部采用linux的主机进行DHCP,并且对部分管理员层人员的IP地址进行MAC绑定,由于管理层人员变动大,人员多,vi直接对dhcpd.conf进行编辑可行,但不便于管理。
    想法:通过PHP程序,将MAC地址IP地址和使用人的对应关系记录到数据库中,通过PHP对dhcpd.conf文件进行操作,达到配置文件与数据库的MAC和IP地址相匹配。既是说,当向数据库中添加一个人员和MAC、IP地址的对应关系,就向dhcpd.conf文件中增加一条记录,反之,当删除一条数据库记录,则找到dhcpd.conf文件中对应的内容,将其删除。编辑同理。
    google和百度了半天,都没找到好点的方法,求达人指导。    dhcpd.conf中MAC地址绑定的内容如下:
    host user1 {
        hardware ethernet 00:00:00:00:00:00;
        fixed-address 1.1.1.1;
    }
    host user2 {
        hardware ethernet 11:11:11:11:11:11;
        fixed-address 2.2.2.2;
    }
    
    数据库记录很简单
    user     MAC                  IP
    user1    00:00:00:00:00:00    1.1.1.1
    user2    11:11:11:11:11:11    2.2.2.2    

解决方案 »

  1.   

    单独的删除一行添加一行就别想了,你只有一次性更新整个文件(最好你们公司的人不要太多了),还有就是格式方面每个人的资料放在一行(按一定的格式),这样用$array = file($filename)返回个数组,每行为数组中的一个元素来进行操作写入等
      

  2.   

    从数据库查出数据,按dhcpd.conf格式内容重新生成新内容替换原文件可以将原文件在替换前自动备份如果能include的话,则可以只更新被include的文件
      

  3.   

    我觉得用数据库建个表,然后对dhcpd.conf进行重写。不过好象你修改了配置文件,要重启下服务才能生效吧。这个问题你怎么解决?难道准备利用PHP重启服务吗?这个好象比较危险啊,建议使用webmin。应该可以不用自己做程序。
      

  4.   

        重新生成是一个办法,但是能直接编辑则更好的,因为因此涉及的其他开发也有文本操作的问题,并且非常的多。若全部生成的形式来做,在某些情况下不现实,比如文件内容大于200M的话,重写一个文件占用的系统资源很大,因此才需要咨询各位如何进行大文件进行快速操作,并且又能节省系统资源的方法。
        另外重启服务的问题可以用sudo解决,因只对内部相关人员开放,因此sudo的安全性不用考虑了。
      

  5.   

    使用文件函数修改文件需要遍历整个文件,非特殊需要不建议使用你的数据组织格式,导致你不容易对他进行处理。建议改为 ini 格式就你的情况,只需一句 SQL 指令就可完成文件的更新SELECT CONCAT(
    'host ', user, ' {\n',
    '  hardware ethernet ', MAC, ';\n',
    '  fixed-address ', IP, ';\n',
    '  }\n') 
     FROM tbl_name
     INTO OUTFILE 'dhcpd.conf'
      

  6.   

    这样规则的文件 用shell脚本或者 perl脚本岂不是更简单?!