Php 如何替换文件中的内容
我有一个配置文件,其中包含一些信息,格式如下:Php 如何替换文件中的内容,php,str-replace,Php,Str Replace,我有一个配置文件,其中包含一些信息,格式如下: define("FTP_USERNAME","583hdsljf"); define("FTP_PASSWORD","******"); define("FTP_FOLDER1","greatfolder"); define("FTP_FOLDER2","greatfolder"); 通常我在替换模板中的值时使用str_replace,但我需要知道当我这样做时要替换什么,例如[replace_THIS_WITH_FTP_USERNAME]。在这种
define("FTP_USERNAME","583hdsljf");
define("FTP_PASSWORD","******");
define("FTP_FOLDER1","greatfolder");
define("FTP_FOLDER2","greatfolder");
通常我在替换模板中的值时使用str_replace,但我需要知道当我这样做时要替换什么,例如[replace_THIS_WITH_FTP_USERNAME]。在这种情况下,我不能这样做,因为当我想用新值替换时,上面所有的值都是未知的和不同的
有什么建议吗
注意:配置文件中的某些值可能是相同的。我会解析该文件并将每一行与regexp匹配 比如说,
$line = 'define("hello", "hi")';
preg_match('/define\(\s*[\'"](.*)[\'"]\s*,\s*[\'"](.*)[\'"]\s*\)/', $line, $matches);
应该给我们一套
Array
(
[0] => define("hello", "hi")
[1] => hello
[2] => hi
)
然后,我们只需将我们的密钥与$matches[1]匹配,并将该行或表达式交换为一个新的行或表达式 您可以使用preg_替换,如下所示
$str='
define("FTP_USERNAME","583hdsljf");
define("FTP_PASSWORD","******");
';
$strval='NEW VALUE';
$str=preg_replace('/FTP_USERNAME","(.*)"/','FTP_USERNAME","'.$strval.'"',$str);
echo $str;
但是,我强烈建议您在配置文件中使用标准格式,如JSON。虽然上面的正则表达式确实有效,但一旦有人手动编辑文件并使用单引号而不是双引号,它就会中断。它也会被一个包含转义引号的字符串打断。我建议用一种更容易操作的格式存储数据,比如JSON。通过这种方式,您可以轻松地手动和编程编辑它们。您现在要做的是需要一点hacky regex或PHP解析器。。。。您也可以将其存储在普通的PHP变量中,如$config=array'username'=>'blah',但根据您的要求,JSON可能会变得更简单。我们已经对JSON进行了一些研究,但问题似乎是一样的$配置=“{FTP_用户名:583hdlsjf,FTP_密码:****,FTP_文件夹1:greatfolder,FTP_文件夹2:greatfolder}”;您的$config应该是json_decode返回的对象。然后只需执行$config->FTP_USERNAME='whatever';并将json_encode$config写入文件。
$content = preg_replace('/(define\("FTP_USERNAME",")[^"]+("\);)
/', '$1new username$2', $content);