【问题标题】:Whats the best way to save user inputted variables on php without a database? [closed]什么是在没有数据库的情况下在 php 上保存用户输入变量的最佳方法? [关闭]
【发布时间】:2014-11-05 19:25:40
【问题描述】:

我想要一个页面,您可以在其中设置各种内容。例如:BoardName 或 Boardurl。它主要用于网站的管理员。但是我想在几乎每个页面中使用例如 $Boardname (例如:我有 header.php 并且在我有的代码中:

包括“variables.php”

或者那个地区的东西。 Variables.php 是存储变量的地方)。

现在我听说过 PHP 中的全局变量。但我也听说根本不推荐这样做(由于加载时间)。然后我听说将它存储在数据库中。如果这不能给我答案,这是我唯一的解决方案。

举一个额外的例子:XenForo 有选项,其中 Boardname 等也可以根据用户输入获得。

提前致谢。 我希望我说清楚了

【问题讨论】:

  • 会话? ->$_SESSION
  • 我看不出它们有什么关系?在每个页面中使用变量听起来像是一个范围或代码组织问题......询问替代持久存储机制是完全不同的。在您对 global 及其性能缺陷的评论中大谈特谈,我完全迷失了。
  • 会话不会永久存储。对吗?
  • 你可以使用像 SQLite 这样的平面文件数据库吗?
  • 问题是,我试图不填充数据库。如果没有它可以完成,我希望这样。

标签: php database variables storage global


【解决方案1】:

我认为你基本上是在考虑一个配置文件,所以你可以有这样的东西:

config.txt JSON 编码的对象/数组

{"BoardName":"a board name","Boardurl":"a board url"}

将此代码放在所有需要变量的文件的顶部

extract((array)json_decode(file_get_contents('config.txt')));

这将允许您在任何地方使用$BoardName$Boardurl


当您需要写回文件时,请执行以下操作:

$new_conf = array();
if(isset($_POST['BoardName']))
{
    $new_conf['BoardName'] = $_POST['BoardName'];
}
if(isset($_POST['Boardurl']))
{
    $new_conf['Boardurl'] = $_POST['Boardurl'];
}

if($new_conf)
{
    file_put_contents('config.txt', json_encode(array_merge((array)json_decode(file_get_contents('config.txt')), $new_conf)));
}
else
{
    // no conf parameters given, do nothing
}

免责声明

这种方法很容易出错,并且丝毫不能很好地扩展。一旦您获得了多个管理员,就会对粉丝造成严重打击。如果您拥有大量用户,那么您肯定会遇到一些磁盘访问速度问题。

【讨论】:

  • 人们如何在管理面板中将其作为变量输入(使用 $_Post 和表单)?
  • 您如何在其中引入例如 10 个变量。因为它会互相替换,对吧?
  • @MrDikke 在array('BoardName'=>$_POST['BoardName']) 中添加尽可能多的键=>您需要的值对
  • @MrDikke 运气好吗?
  • 它可以工作,但我遇到的问题是:如果管理员没有设置任何内容,则提交按钮充当重置。有没有办法与 if(isset) 一起工作? @MonkeyZeus
【解决方案2】:
Create your custom ini file, let's say user.ini file.

Inside this user ini file mention all variables.

user.ini sample content
; This is a sample configuration file

; Comments start with ';', as in php.ini

[settings]
cust_file_size= 12MB
error_log_path= "log/debug/"

[path_settings]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"


than for reading you can just do 
$user_settings_array = parse_ini_file("user.ini", true);
print_r($ini_array);

Than output will:

Array
(
    [settings] => Array
        (
             [cust_file_size] =>12MB
             [error_log_path] =>log/debug/
         )
    [path_settings] =>Array
        (    [path] =>/usr/local/bin
             [URL]  =>http://www.example.com/~username
        }


I hope this will help you.

Thanks

【讨论】:

    【解决方案3】:

    在您发布输入变量的页面中,说 input.php。使用以下代码。并记住以下几点来做到这一点。

    • $content 变量使用连接提供所有需要的 php 变量。
    • 不要忘记在 $content 变量的开头和结尾包含 <?php?>
    • \ 必须转义美元符号,类似于 \$,用于在外部文件中创建新变量。
    • 在变量周围使用{},并放置一个分号;,后跟一个空格。这个空白很重要。并尝试在每一个可能的场合都包含一个。
    • 最后使用单引号将变量 '{}' 括起来。即使它是一个数字。因为如您所知,PHP 变量是自动解析的。

    input.php 中的代码如下所示:

    $content = "<?php ";
    $content .= "\$Boardname='{$_POST['Boardname']}'; ";
    $content .= "\$BoardUrl='{$_POST['BoardUrl']}'; ";
    $content .= "?>";
    file_put_contents("variables.php", $content);
    

    然后,您可以使用 variables.php,如下所示:

    include 'variables.php';
    

    我希望它是满足您需求/问题的最佳解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-20
      • 2020-10-20
      • 2010-09-22
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      相关资源
      最近更新 更多