内容不错请点个赞吧,您的点赞是我前进的动力

引言

我们在PHP开发过程中经常有需要修改配置文件的场景,本文将介绍两种修改配置文件的方法,如有不足,欢迎指出!

正文

  我们假设有个这样的配置文件(如果是其他格式也差不多,可将代码稍加改动)

config.php

<?php
return [
	'name' => '滑稽mc',
	'password' => '123456',
	'app' => 
	'language' => 'PHP',
];

方法一

  我们可以先获取配置文件内容,然后使用正则表达式替换对应的配置项,具体实现如下

index.php

<?php
/**
 $name:配置项名称
 $value:修改后的值
 */
function setConfig($name,$value) {
	$content = file_get_contents('config.php');
	$content = preg_replace("/'{$name}' => .+,/","'{$name}' => '{$value}',",$content);
	file_put_contents($file,$content);
}

我们来分析一下这种方法的优缺点

  • 优点:代码简单,操作简便(实在编不出来了,原谅我…)
  • 缺点:
  1. 必须保证每行配置的格式相同(包括引号类型、空格数量等),否则正则表达式会比较复杂,难书写
  2. 可能会误伤(万一某个配置项的内容刚好和配置的格式相同,虽然几率很小)

测试代码

index.php

//...TODO
setConfig('name','HuajiMC');

结果

config.php

//...
	'name' => 'HuajiMC',
//...

如果你想一次性修改多个值,可以这样修改(下文不再列出)

index.php

<?php
/**
$configs:配置数组(格式:{项目名称:修改值})
*/
function setConfig($configs){
	$content = file_get_contents('config.php');
	foreach($configs as $name => $value) {
		$content = preg_replace("/'{$name}' => .+,/","'{$name}' => '{$value}',",$content);
	}
	file_put_contents($file,$content);
}

方法二

  我们可以将配置数组获取,通过数组修改配置项,然后将数组转换成配置文件格式,具体实现如下

index.php

<?php
function setConfig($name,$value) {
	$configs = require 'config.php'; //获取配置数组
	$configs[$name] = $value; //修改配置项
	$text = ''; //循环将配置数组转为文本
	foreach($configs as $name => $value) {
		$text .= "	'{$name}' => '{$value}',\n";
	}
	$content = <<<EOF
<?php
return [
{$text}
];
EOF;
	file_put_contents('config.php',$content);
}
  • 优点:
  1. 配置格式不必保持一致,只要符合数组语法即可
  2. 代码简单,操作简便(凑数…)
  • 缺点:因为配置文件由循环自动生成,所以有些额外内容(如注释)可能比较难保留

测试结果正常,这里就不再写了,可以自己尝试一下~

结语

  这两种方法各有各的优点或缺点,可以结合实际情况选择相应的方法,如果你有更好的方法或修改意见,欢迎评论区留言提出。

作者:滑稽MC