PHP通过正则表达式动态修改配置文件

一、相关的知识点

正表达式
  • 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[0] m a t c h e s [ 0 ] 保 存 完 整 模 式 的 所 有 匹 配 matches[1] 保存第一个子组的所有匹配 以此类推…
PREG_SET_ORDER: matches[0](), m a t c h e s [ 0 ] 包 含 第 一 次 匹 配 得 到 的 所 有 匹 配 ( 包 含 子 组 ) , matches[1]是包含第二次匹配到的所有匹配(包含子组),以此类推…
参考edit.php文件中的$a返回数据结构说明。

3、php文件中输出html的变量,尽量用“{}”,如:echo “{ $a[1] }”;
4、preg_replace:执行一个正则表达式的搜索和替换。p1:正则匹配 p2:替换后的字符串 p3:原字符串

五、链接

链接:https://pan.baidu.com/s/1QRvm-QCMH9bd8pYpqXo_mw 密码:13yc

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JasonHome

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值