当开发时间很重要时,其他人可以帮助的是一个目标。我的PHP应用程序现在参数化了&配置包含文件的包含文件:
$config = array(
'company' => 'BMC' , // the visible company name
'aplicable_tax' => .21 , // the IVA tax
'context_arr' => array(
'case1' => 12, // the defalul value
'case2' => 13,
'case3' => 14
),
'EN_welcome_text' => 'hello', // do NOT translate on regionalization
// xx comparation matrix
'xx_maxref'=> 5,
'xx_range' => array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
'xx_comp' => array(
// V Other V > I >> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
/* 0 */ array( 0, 3, 5, 5, 5, 5, 5, 5, 5, 5),
/* 1 */ array(-3, 0, 3, 5, 5, 5, 5, 5, 5, 5),
/* 2 */ array(-5,-3, 0, 3, 5, 5, 5, 5, 5, 5),
/* 3 */ array(-5,-5,-3, 0, 3, 5, 5, 5, 5, 5),
/* 4 */ array(-5,-5,-5,-3, 0, 3, 5, 5, 5, 5),
/* 5 */ array(-5,-5,-5,-5,-3, 0, 3, 5, 5, 5),
/* 6 */ array(-5,-5,-5,-5,-5,-3, 0, 3, 5, 5),
/* 7 */ array(-5,-5,-5,-5,-5,-5,-3, 0, 3, 5),
/* 8 */ array(-5,-5,-5,-5,-5,-5,-5,-3, 0, 3),
/* 9 */ array(-5,-5,-5,-5,-5,-5,-5,-5,-3, 0),
),
// and so on
// and so on
// and so on
)
但是这种方法是不安全的,因为任何允许的编辑器都可以注入PHP代码或错误。
我的问题:
答案 0 :(得分:4)
如果第三方有权访问代码,则无法实现有关来自第三方破坏代码的安全性的规范。
到目前为止,所提供的解决方案都存在局限性,在我看来,这些限制会破坏您的规范中更为重要的项目 - 灵活性和可维护性。
我重申 - 如果你可以访问代码,你可以破解代码。 PHP配置文件是配置项目的一种非常常见的方式。如果您不信任开发人员,请不要授予他们访问权限。不要混淆代码并牺牲可维护性。
如果您要求 最简单 配置 PHP 应用程序的答案,那么是一个INI文件。 PHP的核心配置来自这些文件。它的格式提供了您需要的所有语法 - 注释,数组等。它可以使用本机函数进行解析 - parse_ini_file()。如果您担心安全性/访问权限,如上所述,您可以将其从项目中排除或将其保存在单独的位置。相反,如果您想允许某人在不访问代码的情况下配置应用程序,他们可以简单地编辑INI文件。
虽然它是真的parse_ini_file()
不支持多维数组,但您可以将节与数组组合以提供更复杂的配置。在我看来,除此之外的任何事情都非常接近于平面数据文件 - 而不是配置文件 - 并且属于其他地方(即数据库)。
答案 1 :(得分:2)
我使用JSON和json_encode中内置的PHP找到了最简单,最灵活的格式json_decode。您的配置数组如下所示:
{
"company" : "BMC",
"aplicable_tax" : 0.21,
"context_arr" :
{
"case1" : 12,
"case2" : 13,
"case3" : 14
},
"EN_welcome_text" : "hello"
}
优点是,您还可以将配置存储在其他位置(例如数据库),而不必让用户直接访问文件系统。
答案 2 :(得分:2)
XML的一个很好的替代品是YAML。 YAML的语法轻巧,易于读取/写入任何人。另一个重点是YAML在哈希和数组之间有所区别。我建议您使用symfony独立组件:http://fabien.potencier.org/article/40/the-state-of-yaml-in-php
您的文件将如下所示:
company: BMC #the visible company name
aplicable_tax: 0.21 #the IVA tax
context_arr:
case1: 12 #the defalul value
case2: 13
case3: 14
EN_welcome_text: hello #do NOT translate on regionalization
#xx comparation matrix
xx_maxref: 5
xx_range: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
xx_comp:
# V Other V > I >> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
-[ 0, 3, 5, 5, 5, 5, 5, 5, 5, 5 ] # [ 0 ]
-[ -3, 0, 3, 5, 5, 5, 5, 5, 5, 5 ] # [ 1 ]
-[ -5,-3, 0, 3, 5, 5, 5, 5, 5, 5 ] # [ 2 ]
-[ -5,-5,-3, 0, 3, 5, 5, 5, 5, 5 ] # [ 3 ]
-[ -5,-5,-5,-3, 0, 3, 5, 5, 5, 5 ] # [ 4 ]
-[ -5,-5,-5,-5,-3, 0, 3, 5, 5, 5 ] # [ 5 ]
-[ -5,-5,-5,-5,-5,-3, 0, 3, 5, 5 ] # [ 6 ]
-[ -5,-5,-5,-5,-5,-5,-3, 0, 3, 5 ] # [ 7 ]
-[ -5,-5,-5,-5,-5,-5,-5,-3, 0, 3 ] # [ 8 ]
-[ -5,-5,-5,-5,-5,-5,-5,-5,-3, 0 ] # [ 9 ]
YAML拥有所有XML优势,甚至更多。
答案 3 :(得分:1)
我使用的数据库表有一个键,一个值和一个描述。 我通过密钥请求配置值,并在配置页面上显示说明。
保护配置文件的一种方法是询问一个以前定义的常量,您将在脚本中定义该常量。
答案 4 :(得分:0)
将此数据放入XML结构中 - 保证无需代码执行,多嵌套级别,任何类型的数据结构,注释。所有您需要的东西,IDE语法都突出了优势 用于解析 - SimpleXML(作为变体)。
答案 5 :(得分:0)
您始终可以使用.ini文件进行配置。它们不仅非常标准,而且非常易读,因此可以更轻松地配置应用程序。此功能可以帮助您:http://php.net/manual/en/function.parse-ini-file.php
但是,你应该记住Jason所说的:“简单的事实是 - 如果你能访问代码,你可以破解代码”
答案 6 :(得分:0)
鉴于.ini和.xml被拒绝,我会考虑这个:
不要包含配置文件,而是执行以下操作:
eval(“$ config = array(”+ file_get_contents('config.file')+“);”);
你应该稍微解析一下config.file
以提供更多防止注射的保护 - 一个不带引号/未注释;
是危险的角色,可能还有其他人。大多数错误只会导致eval失败。
那就是说,如果你不相信第三方不提供危险的包含文件,那么你需要选择一种不同的方法。你能为第三方提供一个可以发布配置文件的网络界面吗?评论/提示将以HTML格式显示在屏幕上,但您可以使用漂亮,安全的JSON进行解析。