2013-03-23 31 views
1

我想爲我當前的項目創建一個安裝程序,該安裝程序會自動修改幾十個配置文件。如何用PHP找到並替換多個文件中的一行

因此,如果發送表單,PHP腳本應該查找在哪個配置文件中搜索到的選項並更改它。在你問之前,我不能把這些文件放在一起;)。

基本配置行如下所示: $config['base_url'] = 'test';。 我試圖使用str_replace(),但這不起作用,因爲我不知道變量中的當前內容。

所以我需要一個函數在多個文件中搜索$config['base_url'] = '%';並用$config['base_url'] = 'new_value';(例如)替換它。

回答

2

我意識到答案已被接受,原來我刪除了這個,但是,在你提到的配置是可編輯的,這可能意味着其他用戶的意見,所以你不能保證間距將匹配,將使用'代替"始終,所以下面也許是多了幾分寬容

$name = 'base_url'; 
$value = 'new_value'; 
$config = '$config["base_url"] = "old_value";'; 

$config = preg_replace('/\[(?:\'|\")'.$name.'(?:\'|\")\]\s*=\s*(\'|\")(.*)\\1;/', "['".$name."'] = '$value';", $config); 

echo '<pre>', var_dump($config), '</pre>'; 
+0

好吧,我真的不明白這個標誌沙漠;),但我認爲這需要我知道'old_value',不是嗎? – hice3000 2013-03-23 13:53:04

+0

不,它只是要求您知道要替換的配置鍵的名稱,在我的示例中'$ value'代表新值 – Crisp 2013-03-23 13:54:35

+0

這是否意味着我可以輸入整個文件作爲'$ config'並且腳本搜索正確的鑰匙? – hice3000 2013-03-23 13:56:23

0

您可以使用正則表達式如下所示:

/\$config\['base_url'\] = '[a-zA-Z0-9]';/ 

,你將不得不適應每一行。

更好的解決方案,在我看來,是創建一個模板配置文件中包含以下行:

$config['base_url'] = '%BASE_URL%'; 

在那裏你可以簡單地使用str_replace()

+0

非常感謝你,我可以嘗試正則表達式。第二個版本不適合我,因爲它應該稍後可編輯,這個版本只適用於我。 – hice3000 2013-03-23 13:11:58

相關問題