代码之家  ›  专栏  ›  技术社区  ›  Jonathan.

永久保存不带数据库的PHP变量

  •  3
  • Jonathan.  · 技术社区  · 15 年前

    在我的站点的管理区域中有一个表单,用于该站点使用的MySQL数据库的主机名、用户名和密码。目前,这些值被硬编码到一个PHP类中。但是我可以把它链接起来,这样表单就可以编辑php类中的变量(并将结果保存在服务器上,换句话说,变量是硬编码的)。我通常会把这样的事情保存在数据库中,但显然这是不可能的。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Maerlyn    15 年前

    将值保存在配置文件中。并确保它不能从网络上访问。

    最简单的解决方案是将值保存在配置数组中-用户输入值,然后从中生成数组,然后 file_put_contents("config.php", "<?php $config = " . var_export($config)) . 使用这个方法,只要您需要配置数组,您所需要做的就是 include config.php 就在那里。

    这是未测试的代码,例如仅用于目的。根据您的情况,您可能需要解决比赛条件, file_put_contents 不适合这样。以上代码的要点是: var_export 返回有效的PHP代码,您可以 eval (如果你够邪恶的话)或者回音到一个文件,稍后再包括。

        2
  •  5
  •   jmz    15 年前

    创建一个配置文件,并授予您的Web服务器对它的写访问权。然后,只需编写一个脚本就可以将db config保存到这个文件中。例如。

    $fh = fopen('config.php', 'w');
    fwrite($fh, chr(60) . "?php\n");
    fwrite($fh, sprintf("define('DB_HOST', '%s');\n", addslashes($_POST['DB_HOST'])));
    fwrite($fh, sprintf("define('DB_USER', '%s');\n", addslashes($_POST['DB_USER'])));
    fwrite($fh, sprintf("define('DB_PASS', '%s');\n", addslashes($_POST['DB_PASS'])));
    fclose($fh);