一、相关的知识点
正表达式
- preg_match_all – 进行全局正则表达式匹配
- preg_replace – 执行正则表达式的搜索和替换
文件的读和写
- file_get_contents()–文件读取信息函数
- file_put_contents–文件写入函数
二、实现步骤
- 准备好一个配置文件:dbConfig.php
- 定义一个edit.php,配置文件信息的编辑界面
a 读取配置文件的信息
b 使用正则表达式解析配置文件的信息
c 遍历解析后的信息,并输出到修改表单中 - 定义一个doEdit.php执行配置文件信息的修改操作(使用正则替换方式)
三、代码分析
1、初始配置文件:dbConfig.php
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 2018/8/20
* Time: 17:18
*/
define("HOST","localhost11"); //主机名
define("USER","root11"); //用户名
define("PASS","66611"); //密码
define("DBNAME","mydb11"); //数据库名
2、编辑配置文件
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 2018/8/20
* Time: 17:20
*/
//配置文件中文名(英文转中文展示在页面上)
$keyinfo = [
"HOST"=>"主机",
"USER"=>"用户",
"PASS"=>"密码",
"DBNAME"=>"库名"
];
//读取配置文件的信息
$info = file_get_contents("dbConfig.php");
//使用正则表达式解析配置文件的信息(匹配"(、)、{、}、[、]"需要添加"\"转义)
preg_match_all("/define\(\"(.*?)\",\"(.*?)\"\)/",$info,$a); //将info中的信息解析到a变量中存储
/*
* $a 返回的数据结构
array(3) {
[0]=>
array(4) {
[0]=>
string(26) "define("HOST","localhost")"
[1]=>
string(21) "define("USER","root")"
[2]=>
string(20) "define("PASS","666")"
[3]=>
string(23) "define("DBNAME","mydb")"
}
[1]=>
array(4) {
[0]=>
string(4) "HOST"
[1]=>
string(4) "USER"
[2]=>
string(4) "PASS"
[3]=>
string(6) "DBNAME"
}
[2]=>
array(4) {
[0]=>
string(9) "localhost"
[1]=>
string(4) "root"
[2]=>
string(3) "666"
[3]=>
string(4) "mydb"
}
}
*/
//html页面展示
echo "<h2>编辑配置文件</h2>";
echo "<form action='doEdit.php' method='post'>";
foreach($a[1] as $k=>$v){
echo "{$keyinfo[$v]} : <input type='text' name='{$v}' value='{$a[2][$k]}'/><br/><br/>";
}
echo "<input type='submit' value='编辑'/>";
echo "<input type='reset' value='重置'/>";
echo "</form>";
3、处理编辑文件
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 2018/8/20
* Time: 17:20
*/
//目的:执行配置文件的修改操作
$postData = $_POST;
/*
* $postData数据格式
array(4) {
["HOST"]=>
string(10) "localhost1"
["USER"]=>
string(5) "root1"
["PASS"]=>
string(4) "6661"
["DBNAME"]=>
string(5) "mydb1"
}
*/
//1. 读取配置文件的信息
$info = file_get_contents("dbConfig.php");
//2.对POST遍历,并对配置文件信息进行正则替换
foreach($_POST as $k=>$v){
$info = preg_replace("/define\(\"{$k}\",\".*?\"\)/","define(\"{$k}\",\"{$v}\")",$info);//前者替换后者
}
//3. 将替换后的信息写回到配置文件中
file_put_contents("dbConfig.php",$info);//直接写入
echo "<h2><script>alert('修改成功')</script></h2>";
echo "<a href='edit.php'>返回</a>";
四、知识点终结
1、匹配”(、)、{、}、[、]”,需要添加”\”转义
2、preg_match_all:执行一个全局正则表达式匹配。p1:正则 p2:字符串 p3:输出结果 p4:排序,如下
PREG_PATTERN_ORDER(默认): matches[1] 保存第一个子组的所有匹配 以此类推…
PREG_SET_ORDER: matches[1]是包含第二次匹配到的所有匹配(包含子组),以此类推…
参考edit.php文件中的$a返回数据结构说明。3、php文件中输出html的变量,尽量用“{}”,如:echo “{ $a[1] }”;
4、preg_replace:执行一个正则表达式的搜索和替换。p1:正则匹配 p2:替换后的字符串 p3:原字符串