我对此很陌生,并且从我发现的另一篇文章中借用了一些代码,我不知道我想要做的是正确的还是最好的方式,它就是我如何“得到”它工作..
这是代码
<?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);
?>
我正在尝试更新与$ yourname匹配的配置文件条目和POST结果,我可以回显$ yn并且它包含正确的值,但我无法让变量在正则表达式替换中工作,
$content = preg_replace('/\$yourname = \"(.*?)\";/', '$yourname = ""$yn"";', $content);
所以如果$ yn = karl那么我试图将文件中的$ yourname =“”更新为$ yourname =“karl”
但我无法让它工作,我得到的最接近的是用变量作为文本更新文件,即$ yourname =“$ yn”。
希望有人可以提供帮助
答案 0 :(得分:0)
使用您发布的内容我设法让它工作,非常感谢您:)
$content = preg_replace( '/\$yourname = \"(.*?)\";/', '$yourname = "'.$yn.'";', $content);
答案 1 :(得分:-1)
我建议使用这样的模式
preg_replace( '/'.preg_quote( $yourname ).'\s*=\s*\"[^\"]+\";/', $yourname.'="'.$yn.'";', $content);
..&#39; \ S * = \ S * \&#34;([^ \&#34;] +)\&#34 ;;
在这种情况下(因为它使用双引号),它(谨慎?)更好地使用连接并避免逃避它的头痛。当简单性赢得胜利时,无需fancy
。
同时要警惕像php {变种名称} $yn
vs $YN
这样的错误是区分大小写的,如果没有这些知识,它可能是找到错误的主要挑战,因为对我们这些人来说它看起来像相同。当然,文件名,类名,函数和方法不区分大小写(在Windows上)并没有帮助。真的不确定类和方法名称在linux上是否区分大小写,我尽量避免这个问题,并且总是使用相同的大小写。
看起来OP可能需要$yourname
(字面意思)我更新了regx
preg_replace( '/\$yourname\s*=\s*\"[^\"]+\";/', '$yourname="'.$yn.'";', $content);