2012-11-12 103 views
0

我有一個複製文件的腳本,但在複製該文件後,我需要一個腳本來動態更改該文件中的某些字符串值。使用str_replace替換外部文件中的字符串值

通過搜索我發現,file_get_contentsstr_replace最適合這個,但由於某種原因,我有腳本不起作用。

這是我有: (注:$ wikiname正在創建新的維基名

$template = file_get_contents("/var/www/wiki/". $wikiname ."/LocalSettings.php"); 

$snReplace = str_replace("templatewiki", $wikiname, $template); 
$mnReplace = str_replace("Templatewiki", $wikiname, $template); 
$spReplace = str_replace("/iadmin/wikifresh", "/wiki/".$wikiname, $template); 
$wgDBname = str_replace("template_wiki", $wikiname, $template); 

林尋找確切的字符串,並試圖替換維基名字符串,但出於某種原因,這並不在所有的工作。

有我缺少一個明顯的問題?

感謝

+0

是的,它看起來像你缺少['str_replace()函數'](http://php.net/str_replace)是如何工作的,並閱讀它的返回值。 – drew010

回答

2

str_replace返回修改後的字符串,您作爲參數傳遞的字符串保持不變。這就是你需要做什麼:

$template = file_get_contents("/var/www/wiki/" . $wikiname . "/LocalSettings.php"); 
$template = str_replace("templatewiki", $wikiname, $template); 
$template = str_replace("Templatewiki", $wikiname, $template); 
$template = str_replace("/iadmin/wikifresh", "/wiki/" . $wikiname, $template); 
$template = str_replace("template_wiki", $wikiname, $template); 

您還可以使用strtr函數來實現相同的結果:

$template = strtr(file_get_contents("/var/www/wiki/" . $wikiname . "/LocalSettings.php"), array(
    "templatewiki"  => $wikiname, 
    "Templatewiki"  => $wikiname, 
    "/iadmin/wikifresh" => "/wiki/" . $wikiname, 
    "template_wiki"  => $wikiname 
)); 
+0

可讀性很重要+1 –

0

嘗試:

$template = file_get_contents("/var/www/wiki/". $wikiname ."/LocalSettings.php"); 
$template = str_replace(array("templatewiki", "Templatewiki","template_wiki","/iadmin/wikifresh"), array($wikiname,$wikiname, $wikiname,"/wiki/".$wikiname), $template); 

你不必使用多str_replace,你只需要1.

您還可以使用str_ireplace對於不區分大小寫的更換,由1降低了參數,

$template = str_ireplace(array("templatewiki", "template_wiki","/iadmin/wikifresh"), array($wikiname, $wikiname,"/wiki/".$wikiname), $template); 

手冊:str_replacestr_ireplace

1

您需要及時傳遞每個輸出更換到下一個替代的投入,否則你只能替換最後的str_replace(假設你只對腳本的其餘部分使用最後一個變量)。更妙的是你合併內容替換,以更少的命令 -

$template = file_get_contents('/var/www/wiki/' . $wikiname . '/LocalSettings.php'); 
$new = str_replace(array('templatewiki', 'Templatewiki', 'template_wiki'), $wikiname, $template); 
$new = str_replace('/iadmin/wikifresh', '/wiki/' . $wikiname, $new); 

你甚至可以在合併這兩個str_replace函數行使用第二個參數數組一個命令,但是爲了易讀我已經把他們看成是兩個。

您還需要保存輸出,一個辦法就是 -

file_put_contents('/var/www/wiki/' . $wikiname . '/LocalSettings.php', $new);