php修改配置文件内容,php修改配置文件示例代码

例如,修改配置文件aaa.conf,内容如下:

[username]

kiyone

[password]

123

[class]

chass1

要修改[password]下面的123这行密码。

方案采用把这两行替换成空,然后在重新把这两行写在配置文件的结尾。

代码:

复制代码 代码示例:

$fp = fopen("aaa.conf", 'r');

$configfile = fread($fp, filesize("aaa.conf"));

fclose($fp);

//通过正则替换来做

$configfile = preg_replace("/\\n\[password\](.+?)\\n/is", "", $configfile);//本只需匹配[password]到下一空行之间的内容,只需写成/\[password\](.+?)\\n/is就行了,但是我想把这行前面的空行也去掉,所以在前面加了个\n

//把文件重新写回原来的地方

$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 www.jbxue.com

今天做一个php web shell 程序的密码修改,就碰到问题了,密码和程序是在同一个文件里的,如何做到无缝修改,并且不影响程序正常执行。

配置文件的格式类似如下形式:

/*================= 配置选项 ===================*/

//登陆用户和密码,请修改为自己的用户名和密码

$manage["user"] = "root";

$manage["pass"] = "123";

//本文件目前的名字,请正确填写,否则相关操作可能将无效

$manage["file"] = "./ps101.php";

/*================= 配置结束 ===================*/

如何提取出 $manage['user'] = ''root''这样的值进行修改工作,因为文件比较大,代码很多,配置文件是在程序的头部分。

基本的思路:

使用file()遍历整个文件,然后找到某个数组的值的字符串是:

$manage["user"]   = "root";然后,用exploade()来把 $manage["user"] = "";通过"="进行分割,放到两个数组然后把第二个值用更新后的值去替换

最后再把整个字符串重新写入到文件....

但是代码实现起来很困难,上网问高手,给了这么段代码:

复制代码 代码示例:

$lines = file("config.php");

$count =sizeof($lines);

for($i=0; $i

$tmp = explode($lines[$i], '=');

if($tmp==null || sizeof($tmp)!=2)

continue;

if(trim($tmp[0])=='$manage["user"]'){

$lines[$i] = $tmp[0]."= ".$manage["user"];

break;

}

}

$str = implode($lines, "\r\n");

然后将$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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值