如何更新php文件中的变量并将其保存到磁盘?我正在尝试在一个文件中创建一个小型CMS,没有数据库,我希望能够更新配置变量,我已经设置了一个页面,当我更新时,我想更新变量在php文件中。 下面将更新变量,但当然不会将其保存到php文件中,所以我该怎么做?
<?php
$USER = "user";
if (isset($_POST["s"]) ) { $USER = $_POST['USER']; }
?>
<html><body>
Current User: <?php echo $USER; ?>
<form method="post" action="<?php echo $_SERVER["SCRIPT_NAME"]; ?>">
New User<input type="text" name="USER" value="<?php echo $USER; ?>"/>
<input type="submit" class="button" name="s" value="Update" />
</form>
</body></html>
我不知道我是否错过了明显的? 我在考虑使用这样的东西:
$newcms = file_get_contents(index.php)
str_replace(old_value, new_value, $newcms)
file_puts_contents(index.php, $newcms)
但它似乎不是正确的解决方案......
答案 0 :(得分:2)
最简单的方法是将它们序列化到磁盘然后加载它们,这样你就可能有这样的东西:
<?php
$configPath = 'path/to/config.file';
$config = array(
'user' => 'user',
);
if(file_exists($configPath)) {
$configData = file_get_contents($configPath);
$config = array_merge($defaults, unserialize($configData));
}
if(isset($_POST['s']) {
// PLEASE SANTIZE USER INPUT
$config['user'] = $_POST['USER'];
// save it to disk
// Youll want to add some error detection messagin if you cant save
file_put_contents($configPath, serialize($config));
}
?>
<html><body>
Current User: <?php echo $config['user'; ?>
<form method="post" action="<?php echo $_SERVER["SCRIPT_NAME"]; ?>">
New User<input type="text" name="USER" value="<?php echo $config['user']; ?>"/>
<input type="submit" class="button" name="s" value="Update" />
</form>
</body></html>
这种方法使用PHP的本机序列化格式,这种格式不是人类可读的。如果您希望能够手动更新配置或更轻松地检查配置,则可能需要使用其他格式,如JSON,YAML或XML。使用json_encode
/ json_decode
代替serialize
/ unserialize
,JSON可能几乎同样快速且易于使用。 XML会更慢,更麻烦。 YAML也很容易使用,但是你需要一个像sfYaml
这样的外部库。
另外我不会在脚本的顶部执行此操作,id可能至少会创建一个类或一系列函数。
答案 1 :(得分:1)
作为一种更好的方法,您可以只为设置创建一个单独的文件,并将该文件包含在PHP文件中。然后,您可以根据需要更改和保存其值,而不是修改PHP文件本身。
答案 2 :(得分:0)
例如,您有YOURFILE.php,在其中有$targetvariable='hi jenny';
如果你想改变那个变量,那就用这个:
<?php
$fl='YOURFILE.php';
/*read operation ->*/ $tmp = fopen($fl, "r"); $content=fread($tmp,filesize($fl)); fclose($tmp);
// here goes your update
$content = preg_replace('/\$targetvariable=\"(.*?)\";/', '$targetvariable="hi Greg";', $content);
/*write operation ->*/ $tmp =fopen($fl, "w"); fwrite($tmp, $content); fclose($tmp);
?>