使用PHP替换配置文件中的路径字符串

时间:2011-11-23 13:24:20

标签: php string append

这是上一篇文章的延续。 我需要在配置文件(.cfg)中更改一些参数(字符串)

我遵循了Moen的编码风格,并成功替换了我想要替换的字符串。

摩恩的代码:

$url = 'htp://localhost/mydocs/doc.pdf';

$file='config.cfg';
$file_data = explode("\r\n",file_get_contents($file));

foreach($file_data as $line) {
  list($key, $value) = explode('=', $line);
  if($key == "resource") {
    $res_data[] = "$key=$url\n";
    continue;
  }
  $res_data[] = $line;

}

file_put_contents("config.cfg", join("\r\n",$res_data));

但另一方面,我需要替换不是一个字符串而是多个字符串,如资源,名称,文件等。我尝试使用switch语句并查找我想要替换的所有字符串。我可以替换它们但问题是我正在创建一个带有原始参数的已更改字符串的副本。

foreach($ file_data as $ line){       list($ key,$ value)= explode('=',$ line);

switch($key){
     case "resource":
        $res_data[] = "$key=$url"; 
        break;
     case "name":
        $res_data[] = "$key=$name";             
        break;
     case "file":
        $res_data[] = "$key=$file"; 
        break;
    }
  $res_data[] = $line;

}

file_put_contents("config.cfg", join("\r\n",$res_data));

例如,如果参数的值

resource=<?AJIZT?>\srcpdf\srcdef.xml 
name=timmy
file=timmy.txt

我可以更改这些参数并期望输出为

resource=htp://localhost/mydocs/doc.pdf
name=john
file=john.txt

但我的输出看起来像这样:

resource=htp://localhost/mydocs/doc.pdf
resource=<?AJIZT?>\srcpdf\srcdef.xml 
name=john
name=timmy
file=john.txt
file=timmy.txt

如何删除重复项? 感谢

1 个答案:

答案 0 :(得分:0)

如果配置文件不是太大,可以使用file_get_contents和file_puts_contents。 它允许您将文件操作为一个大字符串。

$url = 'htp://localhost/mydocs/doc.pdf';

$file='config.cfg';
$file_data = explode("\n",file_get_contents($file));

foreach($file_data as $line) {
  list($key, $value) = explode('=', $line);
  if($key == "resource") {
    $res_data[] = "$key=$url\n";
    continue;
  }
  $res_data[] = $line;

}

file_put_contents("config.cfg", join("\n",$res_data));

警告,请检查您的行尾分隔符:

explode("\n",file_get_contents($file));

应该是

explode("\r\n",file_get_contents($file));

如果您熟悉它,preg_replace可以很好地完成工作。