PHP如何在php文件中更新变量

时间:2012-02-11 23:30:35

标签: php

如何更新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)

但它似乎不是正确的解决方案......

3 个答案:

答案 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);
?>