存储网站信息的正确方法

时间:2011-04-16 20:48:59

标签: php mysql variables content-management-system

我现在正在使用PHP和MySql构建我自己的个人CMS,我不确定存储站点范围变量(如站点名称)的最佳方法。什么是正确的方法? (如果你能提供一个非常好的简短解释。;)

编辑:变量需要在CMS内编辑。

4 个答案:

答案 0 :(得分:2)

在我看来,最好的方法是将它存储在配置文件中(我使用.ini文件,但您可以轻松使用如下文件)。

我更喜欢将它存储在MySQL数据库中,因为它允许您仍然获取变量(如站点名称或管理员电子邮件地址),即使数据库已关闭

<?php
    define('SITE_NAME','My CMS');
    define('SITE_URL','http://www.example.com');
    define('ADMIN_EMAIL','admin@example.com');
?>

编辑:

创建一个这样的表

id    key    value
-------------------
1     name   My Cms
2     url    http://www.example.com

并像这样访问它(在每个页面的顶部)

<?php
    $config = array();
    $query = mysql_query('SELECT * FROM config');
    while ($row = mysql_fetch_row($query)) {
        $key = $row['key'];
        $value = $row['value'];
        $config[$key] = $value;
    }

    echo $config['name'];
?>

答案 1 :(得分:2)

对于所有目的,没有“最佳”溶剂。 以下是一些如何执行此操作的示例:

简单的PHP文件:

这种解决方案非常简单但不够灵活: 你只是'定义'常数:

define('SITE_NAME', 'all about Foo');
define ('ADMIN_NAME', 'The Dude');
define ('ADMIN_MAIL', 'dude@foo.com');

亲:非常非常简单。

缺点:更改要求您编辑代码。只有平键(没有树/注册表)

ini文件

PHP附带了解析ini文件的函数。这是一本php手册的例子:

; This is a sample configuration file
; Comments start with ';', as in php.ini

[first_section]
one = 1
five = 5
animal = BIRD

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

[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"

你可以在多维数组中解析它:

$ini_array = parse_ini_file("sample.ini", true);
print_r($ini_array);

将输出:

Array
(
    [first_section] => Array
        (
            [one] => 1
            [five] => 5
            [animal] => Dodo bird
        )

    [second_section] => Array
        (
            [path] => /usr/local/bin
            [URL] => http://www.example.com/~username
        )

    [third_section] => Array
        (
            [phpversion] => Array
                (
                    [0] => 5.0
                    [1] => 5.1
                    [2] => 5.2
                    [3] => 5.3
                )

        )

)

优点:灵活。众所周知的标准语法。

缺点:难以在后端编辑

请参阅:http://php.net/manual/de/function.parse-ini-file.php

简单SQL

另一个简单的方法,但它使用数据库来存储conig密钥。 表结构是:

config{config_name UNIQUE KEY VARCHAR[64] ; config_value VARCHAR[128]}

这只是伪代码,我需要有关PHP和SQL的更多信息随时谷歌。

SQL树 允许您创建树状结构。要对此进行存档,请使用相同的表结构,但在键名中包含“/”:

admin/name | 'The Dude'
admin/mail | 'dude@foo.com'

然后在数组中加载COMPLETE配置并解析它:

function parseRawConfig($rawConfig){
    $result = array();
    foreach($rawConfig as $key => $value){
        $nodeNames = explode('/',$key);
        $nodeCount = count($nodes);
        $node = $result;
        for($i=1;$i<$nodeCount;$i++){
            if(!array_key_exists($nodeNames[$i],$node)){
                $node[$nodeNames[$i]] = array();
            }
        }
        $node[$nodeNames[$nodeCount-1]] = $value;   
    }
    return $result;
}

然后您可以像这样访问您的密钥:

echo $config['admin']['mail'];

这样可以轻松为后端生成漂亮的树视图,但要保存更改,您必须“重建”原始路径。

Pro:结构化分层数据。

Con:复杂,难以实现,需要数据库连接

<强> XML 将所有conig设置写入xml文件。 您可以使用特定于应用程序的xml或类似样式的通用注册表:

<cmsConf>
  <site>all about foo</site>
  <admin>
    <name>The Dude</name>
    <mail>dude@foo.com</mail>
  </admin>
</cmsConf>

<reg>
<key name="site">all about foo</key>
<node name="admin">
  <key name="name">The Dude</key>
  <key name="mail">dude@foo.com</key>
</node>
</reg>

PHP为读取/写入xml提供了大量的类和函数,使用xml可以很容易地创建与其他应用程序的接口。

xml的优缺点是一个很大的话题。用几句话来概括它们。

重要 这些只是一些非常简单的例子,如果你选择一个,我建议你深入研究这个主题!

我最喜欢的是XML;)

答案 2 :(得分:0)

您喜欢的任何格式的配置文件。

答案 3 :(得分:0)

我通常会创建一个包含所有配置变量的表。每列都会明确说明其设置的含义。然后我使用以下查询将其存储在单个数组中以便于使用。

<?php
$result = mysql_query("SELECT * FROM configtable WHERE siteID=$siteID LIMIT 1");
$siteConfig = mysql_fetch_assoc($result);
?>

这样可以非常轻松地添加新的配置参数,您只需要在配置表中添加一列,就可以直接使用站点中的值。另外,您只有一个变量,因此意外重用配置变量不会发生。