在php中存储动态设置的最佳方法是什么?

在php中存储动态设置的最佳方法是什么?,php,settings,store,pull,Php,Settings,Store,Pull,我只是想知道是否有人有一个用php存储/更新动态设置的好系统 我所说的动态设置是指由其他脚本自动更改的设置 目前,我们使用的系统基本上是file\u get\u contents我们的设置php文件,将其视为字符串,更改设置,并将更新的设置作为file\u put\u contents 它能用,但有点脏。我们可以从中存储/修改/提取这些设置的任何其他建议?Mysql不是一个选项,我们希望避免额外的查询 作为额外的好处,一些系统可以在多台服务器上共享这些数据,因为这些设置中的许多都在多个盒子中使用

我只是想知道是否有人有一个用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编写的解析器快。 脑海中浮现的两个选项