0

ファイルを複製するスクリプトがありますが、そのファイルを複製した後、そのファイル内の特定の文字列値を動的に変更するスクリプトが必要です。

周りを検索する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);

正確な文字列を検索し、その文字列を wiki 名に置き換えようとしています。しかし、何らかの理由で、これはまったく機能しません。

私が見逃している明らかな問題はありますか?

ありがとう

4

3 に答える 3

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
));
于 2012-11-12T17:55:28.447 に答える
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);

2番目のパラメータに配列を使用してこれらの2つのstr_replace行を1つのコマンドにマージすることもできますが、読みやすくするために2つにしています。

また、出力を保存する必要があります。1つの方法は-

file_put_contents('/var/www/wiki/' . $wikiname . '/LocalSettings.php', $new);
于 2012-11-12T18:00:38.387 に答える
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_replace str_ireplace

于 2012-11-12T17:58:32.340 に答える