- dede/sys_info.php中
- //保存配置的改动
- if($dopost=="save")
- {
- if(!isset($token)){
- echo 'No token found!';
- exit;
- }
- if(strcasecmp($token, $_SESSION['token']) != 0){
- echo 'Token mismatch!';
- exit;
- }
- foreach($_POST as $k=>$v)
- {
- if(preg_match("#^edit___#", $k))
- {
- $v = cn_substrR(${$k}, 1024);
- }
- else
- {
- continue;
- }
- $k = preg_replace("#^edit___#", "", $k);
- $dsql->ExecuteNoneQuery("UPDATE `#@__sysconfig` SET `value`='$v' WHERE varname='$k' ");
- }
- ReWriteConfig();
- ShowMsg("成功更改站点配置!", "sys_info.php");
- exit();
- }
复制代码 在选择更改配置后,通过foreach($_POST as $k=>$v)接受参数,并且将参数内容写入了数据库,之后进入ReWriteConfig();。
- //更新配置函数
- function ReWriteConfig()
- {
- global $dsql,$configfile;
- if(!is_writeable($configfile))
- {
- echo "配置文件'{$configfile}'不支持写入,无法修改系统配置参数!";
- exit();
- }
- $fp = fopen($configfile,'w');
- flock($fp,3);
- fwrite($fp,"<"."?php\r\n");
- $dsql->SetQuery("SELECT `varname`,`type`,`value`,`groupid` FROM `#@__sysconfig` ORDER BY aid ASC ");
- $dsql->Execute();
- while($row = $dsql->GetArray())
- {
- if($row['type']=='number')
- {
- if($row['value']=='') $row['value'] = 0;
- fwrite($fp,"\${$row['varname']} = ".$row['value'].";\r\n");
- }
- else
- {
- fwrite($fp,"\${$row['varname']} = '".str_replace("'",'',$row['value'])."';\r\n");
- }
- }
- fwrite($fp,"?".">");
- fclose($fp);
- }
复制代码 这里的代码将前面插入数据库的数据直接取出,没有再做验证。在while($row = $dsql->GetArray()),有两个分支,当$row['type']=='number'时,会往文件中直接写入,其他情况下会进行一次str_replace("'",'',$row['value'])将单引号替换掉。所以我们考虑使用第一个分支,选择一个默认为数字的参数。
比如使用参数cfg_ftp_port,它表示采用的ftp端口, 查看配置文件 data/config.cache.inc.php
|