在php中存储动态设置的最佳方法是什么?
我只是想知道是否有人有一个用php存储/更新动态设置的好系统 我所说的动态设置是指由其他脚本自动更改的设置 目前,我们使用的系统基本上是file\u get\u contents我们的设置php文件,将其视为字符串,更改设置,并将更新的设置作为file\u put\u contents 它能用,但有点脏。我们可以从中存储/修改/提取这些设置的任何其他建议?Mysql不是一个选项,我们希望避免额外的查询 作为额外的好处,一些系统可以在多台服务器上共享这些数据,因为这些设置中的许多都在多个盒子中使用。但我想我们可以分开处理在php中存储动态设置的最佳方法是什么?,php,settings,store,pull,Php,Settings,Store,Pull,我只是想知道是否有人有一个用php存储/更新动态设置的好系统 我所说的动态设置是指由其他脚本自动更改的设置 目前,我们使用的系统基本上是file\u get\u contents我们的设置php文件,将其视为字符串,更改设置,并将更新的设置作为file\u put\u contents 它能用,但有点脏。我们可以从中存储/修改/提取这些设置的任何其他建议?Mysql不是一个选项,我们希望避免额外的查询 作为额外的好处,一些系统可以在多台服务器上共享这些数据,因为这些设置中的许多都在多个盒子中使用
谢谢 我想说是ini文件
parse_ini_file()
()是一个很好的函数,它负责读取,写入的答案就在这里:我想说的是ini文件parse_ini_file()
()是一个非常好的函数,它负责读取,写入的答案就在这里:为此,我们使用以下方法:
它读取和写入包含key=value对的简单文本文件
parse_conf_文件可以将conf作为定义值加载,或者返回键值的关联数组。Write_conf_file允许通过将键值数组作为参数传递,仅覆盖所需的值
如果已将allow_url_fopen设置为true,则可以从其他服务器加载配置文件,而不会出现问题
希望此帮助为此,我们使用以下方法: 它读取和写入包含key=value对的简单文本文件 parse_conf_文件可以将conf作为定义值加载,或者返回键值的关联数组。Write_conf_file允许通过将键值数组作为参数传递,仅覆盖所需的值 如果已将allow_url_fopen设置为true,则可以从其他服务器加载配置文件,而不会出现问题
希望这有助于您真的不想在文件中存储动态数据,特别是如果它是公共数据。PHP没有复杂的文件锁定语义来支持这一点。如果你知道你在做什么,你可以在PHP上实现你自己的咨询定位系统——但是如果你知道你在做什么,你就不会问这个问题了 Mysql不是一个选项,我们希望避免额外的查询 哦,天哪 根据您提供的信息,MySQL可能是最好的选择。如果您的数据库中存在负载问题,尝试使用不同的基底来处理数据也无济于事 实际上,我建议在自定义数据库绑定会话处理程序中实现值的存储和检索(并为所有请求启用会话) 您还可以使用其他工具—nosql数据库和memcache是明显的候选工具—但当您已经有一个MySQL实例可用时,它们就没有什么意义了
(共享内存和APC变量存储与基于文件的存储有相同的问题)您确实不想在文件中存储动态数据,尤其是在其公共数据的情况下。PHP没有复杂的文件锁定语义来支持这一点。如果你知道你在做什么,你可以在PHP上实现你自己的咨询定位系统——但是如果你知道你在做什么,你就不会问这个问题了 Mysql不是一个选项,我们希望避免额外的查询 哦,天哪 根据您提供的信息,MySQL可能是最好的选择。如果您的数据库中存在负载问题,尝试使用不同的基底来处理数据也无济于事 实际上,我建议在自定义数据库绑定会话处理程序中实现值的存储和检索(并为所有请求启用会话) 您还可以使用其他工具—nosql数据库和memcache是明显的候选工具—但当您已经有一个MySQL实例可用时,它们就没有什么意义了
(共享内存和APC变量存储与基于文件的存储存在相同的问题)如果您不想使用MySql,我认为您现在所做的是最好的解决方案,任何类型的属性/ini文件写入系统都会非常昂贵,并且无法解决并发访问问题。为了消除这个问题,我建议您将更新后的文件写入同一文件夹中的临时文件,删除旧的settings.php并将临时文件重命名为settings.php。在删除settings.php之后和重命名temp文件之前,仍有很小的可能会发出请求,当您包含该文件时,可以通过执行以下操作来处理该请求:
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 ... */
}
这应该是非常安全的。如果你不想使用MySql,我认为你现在正在做的是最好的解决方案,任何类型的属性/ini文件写入系统都会非常昂贵,并且不会解决并发访问问题。为了消除这个问题,我建议您将更新后的文件写入同一文件夹中的临时文件,删除旧的settings.php并将临时文件重命名为settings.php。在删除settings.php之后和重命名temp文件之前,仍有很小的可能会发出请求,当您包含该文件时,可以通过执行以下操作来处理该请求:
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 ... */
}
这应该是非常安全的。如果坚持基于文件的方法,请记住以下事项: 使用本机解析器 用C编写的解析器很可能比用PHP编写的解析器快。 突然想到的两个选择是 使用包含格式良好的php代码的
settings.php
文件。我过去使用的一种方法是使用一个
<?php return
array(
'key' => 'value'
);
如果您坚持使用基于文件的方法,请记住以下事项:
使用本机解析器
用C编写的解析器很可能比用PHP编写的解析器快。
脑海中浮现的两个选项