只是想知道是否有人在php中存储/更新动态设置的好系统?
我的意思是动态是由其他脚本自动更改的设置。
目前我们使用的系统基本上是file_get_contents我们的设置php文件,将其视为字符串,更改设置和file_put_contents更新的设置。
它有效,但有点脏。我们可以存储/修改/提取这些设置的任何其他建议吗? Mysql不是一个选项,我们希望避免额外的查询。
作为一个额外的好处,一些系统可以在多个服务器上共享这些数据,因为许多这些设置都可以在多个框中使用。但我想我们可以单独处理。
THX!
答案 0 :(得分:2)
您确实不希望将动态数据存储在文件中,特别是在其常见数据中。 PHP没有复杂的文件锁定语义来支持这一点。如果你知道你在做什么,你可以在PHP之上实现自己的咨询定位系统 - 但是如果你知道你在做什么,你就不会问这个问题。
亲爱的,亲爱的。Mysql不是一个选项,我们希望避免额外的查询
根据您提供的信息,MySQL可能是最佳选择。如果您在数据库中加载了问题,尝试使用不同的基材来获取数据将无济于事。
实际上,我建议在自定义数据库绑定会话处理程序中实现值的存储和检索(并为所有请求启用会话)。
您可以使用其他工具 - nosql数据库和内存缓存是明显的候选者 - 但是当您已经有MySQL实例可用时,它们就没有意义了。
(共享内存和APC变量存储与基于文件的存储具有相同的问题)
答案 1 :(得分:1)
如果您不想使用MySql,我认为您现在正在做的是最好的解决方案,任何类型的属性/ ini文件编写系统都会花费更多,并且无法解决并发访问问题。要消除此问题,我建议您将更新的文件写入同一文件夹中的临时文件,删除旧的settings.php并将临时文件重命名为settings.php。在删除settings.php之后和重命名临时文件之前发出请求的可能性很小,可以通过在包含文件时执行类似操作来处理:
if( file_exists( 'settings.php' ) ) {
include( 'settings.php' );
} else {
/* ... wait 100 miliseconds or so and try again... do this a few times and then fail ... */
}
这应该是非常安全的。
答案 2 :(得分:1)
如果您坚持使用基于文件的方法,请记住:
用C语言编写的解析器很可能比PHP中的解析器更快。 我想到的两个选项是
使用包含格式良好的PHP代码的settings.php
文件。我过去使用过的一种方法是使用一个看起来像
<?php return
array(
'key' => 'value'
);
此文件可以是include
- d一次或多次,include
语句将返回配置数组。在编写新设置时,使用var_export()
获取有效的PHP代码。
另一种方法是使用settings.csv
文件。使用fgetcsv()
阅读,使用fputcsv()
撰写。
要避免在更新设置时读取部分文件,请先将新设置写入临时文件,然后将此文件移至设置文件位置(最好使用* nix上的mv (1)
。< / p>
答案 3 :(得分:0)
我会说ini文件。 parse_ini_file()
(http://php.net/manual/en/function.parse-ini-file.php)是一个很好的功能,负责阅读,写作的答案就在这里:create ini file, write values in PHP
答案 4 :(得分:0)
为此,我们使用:http://projects.jgotti.net/projects/simplemvc/browse/trunk/includes/fx-conf.php 它读取和写入包含键=值对的简单文本文件。
parse_conf_file可以将confs加载为定义的值或返回键值的关联数组。 Write_conf_file允许您通过传递一组键值作为参数来仅覆盖所需的值。
如果您将allow_url_fopen设置为true,那么您可以毫无问题地从其他服务器加载配置文件。
希望这个帮助