我目前正在尝试更改配置文件中的变量。我尝试了以下内容:
colnames(df$x2)
NULL
在以下字符串上:
public static function change(){
$fl = file("../config.inc.php");
$key = $_POST['key'];
$id = $_POST['id'];
$secret = $_POST['secret'];
$content = "";
foreach($fl as $line){
$content .= $line;
}
$content = preg_replace("\$licence = array\(\'key\'=>\'(.*?)\'\);$", "licence = array('key'=>'$key');", $content);
$content = preg_replace("/\$rey_connect = array\((.*?\'client_id\'=>\')(.*?)('.*?\'client_secret\'=>\')(.*?)(\')(.*?)(?:\));(?:\n|$)/", "\$rey_connect = array(\1$id\3$secret\5);", $content);
$myfile = fopen("../config.inc.php", "w") or die("Unable to open file!");
$txt = "$content";
fwrite($myfile, $txt);
fclose($myfile);
}
因此正则表达式完全正常on phpliveregex,但不在我的脚本中。不知何故,它不会影响配置文件的内容。
答案 0 :(得分:3)
// this is really BAD approach $content = file_get_contents("config"); $content = preg_replace(...); file_put_contents("config", $content); // or eval($content);
function connect($host, $db, $pwd, $user, $key, $id, $secret) { $mysql = array('host'=>$host, 'database'=>$db, 'password'=>$pwd, 'user'=>$user); $licence = array('key'=>$key); $rey_connect = array('active'=>true,'client_id'=>$id,'client_secret'=>$secret); }
然后将utils.php包含到另一个脚本中并在那里调用你的函数。
include_once 'utils.php';
connect(
'localhost',
'schnnet',
'root,
'root',
'jZf5hhRd5vqmwTkMB9eq',
'123',
'123456');
更新:
我能够重现您所描述的问题,但刚刚在我的本地服务器上运行了简化版本的代码,现在它似乎正在按预期工作。试试吧。
<?php
function change()
{
$id = 'someId';
$key = 'someKey';
$secret = 'someSecret';
$content = file_get_contents("config.php");
$content = preg_replace("/(licence[^>]+)([^)]+)(.+)/si", "$1>'" . $key . "'$3", $content);
$content = preg_replace("/(client_id[^>]+)([^,]+)(.+)/si", "$1>'" . $id . "'$3", $content);
$content = preg_replace("/(client_secret[^>]+)([^)]+)(.+)/si", "$1>'" . $secret . "'$3", $content);
file_put_contents("config.php", $content);
}
change();
?>
答案 1 :(得分:1)
您的代码运行良好:http://ideone.com/Gev03z
(虽然在更换字符串之前你不需要'\'
。)
问题在于您没有将$content
写回文件。
更改$content
只会更改文件内容的本地副本。
修改强>
这显然不是正则表达式问题,而是文件权限问题。
当您致电fwrite
时,您不会检查回报是否为false
。在这种情况下,我希望它是,这意味着你不能写入文件。
现在除非我错过了我的猜测,这是因为$fl
因为文件已经打开了。请尝试在close($fl);
之前添加$myfile
。