使用PHP对配置文件进行修改
2008-04-04 18:19
549 查看
使用PHP对配置文件进行修改
文/ heiyeluren
今天做一个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<$count; $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);
于是我一试验,还真可以~~~~
写于 2004-12-24 02:00
祝大家圣诞节快乐!
文/ heiyeluren
今天做一个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<$count; $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);
于是我一试验,还真可以~~~~
写于 2004-12-24 02:00
祝大家圣诞节快乐!
相关文章推荐
- 使用PHP对配置文件进行修改
- 使用PHP对配置文件进行修改
- PHP经典实例教程(使用正则动态修改配置文件)
- php经典实例使用正则动态修改配置文件
- Unity3D 使用XML进行简单的配置文件修改
- php经典实例使用正则动态修改配置文件
- php经典实例使用正则动态修改配置文件
- PHP使用之修改php.ini 配置文件(Mac)
- 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)
- 大型Java项目中使用maven进行管理,pom.xml文件中build的配置
- 安装好php后, 修改php.ini 配置文件无效
- php的默认配置文件在 /usr/local/apache2/conf/php.ini,通过为了使你的web更安全,我们需要对php.ini进行一些设置!
- 【Linux】使用sed、awk来完成批量修改配置文件的shell设计
- Sublime Text 3 配置 PHP IDE环境 并使用Xdebug进行调试
- php使用COPY函数更新配置文件的方法
- python 中使用ConfigParser类修改配置文件
- Linux中使用sed命令或awk命令修改常规配置文件
- 生产环境php.ini配置文件修改
- Nginx下修改php.ini后重新加载配置文件命令
- nginx:413 Request Entity Too Large 及 修改 PHP上传文件大小配置