內容不錯請點個贊吧,您的點贊是我前進的動力
引言
我們在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);
}
我們來分析一下這種方法的優缺點
- 優點:代碼簡單,操作簡便(實在編不出來了,原諒我...)
- 缺點:
- 必須保證每行配置的格式相同(包括引號類型、空格數量等),否則正則表達式會比較復雜,難書寫
- 可能會誤傷(萬一某個配置項的內容剛好和配置的格式相同,雖然幾率很小)
測試代碼
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('config.php',$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);
}
- 優點:
- 配置格式不必保持一致,只要符合數組語法即可
- 代碼簡單,操作簡便(湊數...)
- 缺點:因為配置文件由循環自動生成,所以有些額外內容(如注釋)可能比較難保留
測試結果正常,這里就不再寫了,可以自己嘗試一下~
結語
??這兩種方法各有各的優點或缺點,可以結合實際情況選擇相應的方法,如果你有更好的方法或修改意見,歡迎評論區留言提出。
作者:滑稽MC