$fp = fopen(aaa.conf, 'w'); fwrite($fp, trim($configfile)); fclose($fp); //在文件最后加入新的password两行 $newpassword = 456; $filename=aaa.conf;//定义操作文件 $fcontent = file($filename); //file()把整个文件读入一个数组中 $fp = fopen($filename,a); $str = \n\n[password]\n$newpassword; fwrite($fp, $str);//by bbs.it-home.org
复制代码
今天做一个php web shell 程序的密码修改,就碰到问题了,密码和程序是在同一个文件里的,如何做到无缝修改,并且不影响程序正常执行。配置文件的格式类似如下形式:
复制代码
然后将$str写回到文件
确实,按照我的思路来的话,代码就应该是这样的,但是我去一执行,并不好使。
怎么半呢?想了半天,能不能通过正则表达式来做。于是又考虑到 $manage[''user'']这样的形式在程序里出现的次数不多,也许能够通过正则替换来修改。
思路:把所有的程序代码读进一个变量里,然后通过正则替换掉这个字符串里的相应内容。
代码:
$fp = fopen($manage[file], 'r');// 把文件读进$configfile
$configfile = fread($fp, filesize($manage[file]));fclose($fp);// 通过正则替换来做
$configfile = preg_replace(/[$]manage\[\user\\]\s*\=\s*[\'].*?[\']/is, \$manage[\user\] = \$user_name\, $configfile);$configfile = preg_replace(/[$]manage\[\pass\\]\s*\=\s*[\'].*?[\']/is, \$manage[\pass\] = \$user_pass\, $configfile); // 把文件重新写回原来的地方$fp = fopen($manage[file], 'w');fwrite($fp, trim($configfile));fclose($fp);
复制代码
