我现在正在使用PHP和MySql构建我自己的个人CMS,我不确定存储站点范围变量(如站点名称)的最佳方法。什么是正确的方法? (如果你能提供一个非常好的简短解释。;)
编辑:变量需要在CMS内编辑。
答案 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);
?>
这样可以非常轻松地添加新的配置参数,您只需要在配置表中添加一列,就可以直接使用站点中的值。另外,您只有一个变量,因此意外重用配置变量不会发生。