例如,我有一个 config.php:
//default config
$name = 'default name';
$mail = 'default mail';
我想用一个表单让用户编辑变量,一切都和使用数据库一样,但在这种情况下,不同之处在于它是在 PHP 文件上实现的
那么,在我得到之后$_POST['name']; $_POST['mail'];
,如何修改变量并将其保存在那个 PHP 中?
例如,我有一个 config.php:
//default config
$name = 'default name';
$mail = 'default mail';
我想用一个表单让用户编辑变量,一切都和使用数据库一样,但在这种情况下,不同之处在于它是在 PHP 文件上实现的
那么,在我得到之后$_POST['name']; $_POST['mail'];
,如何修改变量并将其保存在那个 PHP 中?
$config = file_get_contents('config.php');
那应该将配置文件读入字符串。然后您可以搜索字符串或使用正则表达式将$name
值替换为$_POST['name']
值。
这应该工作
$name = $_POST['name'];
$mail = $_POST['mail'];
$config = file_get_contents('config.php');
$pos = strpos($config, '$name');
$config = substr_replace($config, '$name = \'' . $name . '\'', $pos, strpos($config, ';', $pos) - $pos);
$pos = strpos($config, '$mail');
$config = substr_replace($config, '$mail = \'' . $mail . '\'', $pos, strpos($config, ';', $pos) - $pos);
file_put_contents('config.php', $config);
配置文件需要在 PHP 中?您可以使用以下方法将快速配置数组组合到外部文件中var_export
配置文件config.php
$config = array(
'name' => 'My Name',
'email' => 'some@one',
);
加载/保存配置文件:
include 'config.php'; // Bring config into the current namespace
if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Update on POST
$config['name'] = $_POST['name'];
$config['email'] = $_POST['email'];
file_put_contents('config.php', sprintf("<?php\n%s\n", var_export($config, true)));
}
print_r($config);
与任何用户输入一样,您应该确保根据白名单过滤输入以清除危险数据。例如,preg_replace('/\W/', '', $_POST['name'])
将从用户提供的值中删除不安全的数据(非单词字符)。
您可以使用 file_put_contents 函数将配置写入文件,并使用自定义函数来构建内容本身,如下所示:
function generateConfig(){
return "//default config"
. '$name' . " ='{$_POST['name']}';"
. '$mail' . " ='{$_POST['mail']}';";
}
file_put_contents("file.config", generateConfig());
这是一种解决方案,但更好的是使用 JSON、XML 或数据库。