Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何替换文件中的内容_Php_Str Replace - Fatal编程技术网

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);