我对此很陌生,并从我发现的另一篇文章中借用了一些代码,我不知道我想做的是正确的还是最好的方式,这只是我如何"获得"它的工作…
代码
<?php
$yn = $_POST['YN'];
echo $yn;
$fl='config.php';
/*read operation ->*/ $tmp = fopen($fl, "r"); $content=fread($tmp,filesize($fl)); fclose($tmp);
// here goes your update
$content = preg_replace('/'$yourname = '"(.*?)'";/', '$yourname = ""$YN"";', $content);
/*write operation ->*/ $tmp =fopen($fl, "w"); fwrite($tmp, $content); fclose($tmp);
?>
我试图更新与POST结果匹配$yourname的配置文件条目,我可以回显$yn,它包含正确的值,但我不能让变量在正则表达式替换中工作,
$content = preg_replace('/'$yourname = '"(.*?)'";/', '$yourname = ""$yn"";', $content);
所以如果$yn = Karl,那么我试图将文件中的$yourname = "更新为$yourname = " Karl "
但我不能让它工作,我得到的最接近的是它更新文件与变量作为文本,即$yourname = "$yn"。
希望有人能帮忙
使用您发布的内容,我设法使其工作,非常感谢:)
$content = preg_replace( '/'$yourname = '"(.*?)'";/', '$yourname = "'.$yn.'";', $content);
我建议使用这样的模式
preg_replace( '/'.preg_quote( $yourname ).''s*='s*'"[^'"]+'";/', $yourname.'="'.$yn.'";', $content);
. . ' s * = '年代 *'"([^'"]+)'";
- preg_quote($yourname) -转义变量输入(文字匹配)
- 's* -一个或多个空格
- = - literal (=)
- 's* -一个或多个空格
- '" - literal (")
- [^'"]+ -尽可能多地匹配任何非(")贪婪匹配的字符。
- '" - literal (")
- ;文字(,)
在这种情况下(因为它使用双引号),(谨慎的?)最好使用连接并避免转义的麻烦。当简单取胜时,不需要做fancy
。
也要小心这样的错误,$yn
和$YN
在php变量名是区分大小写的,没有这些知识,它可以是一个主要的挑战,找到错误,因为对我们人类来说,它看起来是一样的。当然,文件名、类名、函数和方法不区分大小写(在Windows上)也无济于事。真的不确定在linux上类和方法名是否区分大小写,我尽量避免这个问题,并始终使用相同的大小写。
看到它看起来像OP可能想要$yourname
(字面上)我更新了regx
preg_replace( '/'$yourname's*='s*'"[^'"]+'";/', '$yourname="'.$yn.'";', $content);
https://regex101.com/r/yM9cX9/1