我计划使用XML文档来存储我的下一个PHP项目的配置,格式类似于ASP.NET Web.Config文件.只有两个问题:
无法提供给浏览器.
必须在共享主机中可行.
我认为阻止它被提供的最好方法是将文件类型更改为PHP并添加以下注释:
....
这工作正常,但我不认为这是最好的解决方案.
有没有其他人使用XML来存储PHP项目的配置?什么是一些好的替代解决方案(如果没有定义常量,而不是在退出脚本的文件开头放置注释)?
更新:
更改了问题标题以更好地反映我正在寻找的内容.对于误导性的原始问题标题,我们深表歉意.使用XML进行配置不是问题.我在使用XML进行配置时要求最佳实践.请停止建议我使用数组或INI文件...
我希望配置文件尽可能简单易用,即使对于非php开发人员也是如此.我选择XML是因为它是语言中立的.我已经在使用SimpleXML来解析配置(部分).我也不担心编译或加快速度,因为可以使用memcached或其他实用程序来实现.
迄今为止最好的解决方案是:
将其移出Web根目录.
可能,但希望保持配置尽可能接近应用程序.
使用htaccess隐藏配置文件.
我不想冒险让某人破坏.htaccess文件,让配置文件暴露的风险.
我想听一下在应用程序中使用XML进行配置设置的经验,以及它们如何阻止配置文件的提供.
这就是我通常对配置文件所做的事情 - 实际上,这是更基本的设置,通常它包含在自定义类中,它将多个配置文件组合到一个配置对象中:
config.php文件:
return array( 'config1'=> 'config1value', 'config2'=> 'config2value', );
some_page.php:
$config= include('config.php'); if ($config['config1']) ...
配置作为PHP数组存储在PHP文件文件中,因此它由PHP引擎解析,永远不会返回到浏览器.(您可以通过将配置文件存储在Web根目录之外来进一步保护配置文件,设置mod_rewrite规则以防止提供配置文件/目录等)
将配置信息存储在XML文件中会增加将XML文件解析为每个请求的开销.高级配置数据的数据库存储很好,但也很昂贵(显然,数据库不会存储您的数据库连接信息,因此您仍然需要一些基本信息的配置解决方案).配置数据通常是非常静态的(很少写/每次请求读取),因此它通过memcached或其他缓存方案成熟缓存.
将它们放在文档根目录之外,或者如果您不能或不会将其限制为从外部访问,只需使用Apache mod_rewrite.例如:
RewriteEngine On RewriteRule ^config.xml [R=404,L]
PHP有多个用于读/写XML的库,因此没有问题.如果它是相对简单(平坦)的数据,请考虑使用INI文件.PHP具有parse_ini_file()
内置函数,.Net上的任何内容都将读取.ini文件.