我需要能够将php应用程序的数据存储在文件中。我需要能够在没有PHP本身以外的任何外部依赖的情况下执行此操作。
以下是我的要求:
我宁愿没有像上面提到的那样存储在数组中的设置。相反,我更喜欢一些访问方法:getConfig(“Database”,“Accesssettings”,“Username”)将返回'myDBUsername'。原因是我想限制我在全局范围内存储的变量。
获取/检索这些内容的最佳方法是什么?
我认为可能是xml文件的层次结构,但我不确定访问xml文件的PHP是什么样的(特别是我需要能够添加,编辑和删除)。如果它应该是XML,我应该研究什么样的xml访问。
如果是另一种格式,我想指出正确的方向,以了解如何使用该格式。
答案 0 :(得分:3)
Brian,parse_ini_file就是你所需要的。
啊,我错过了你要通过PHP编辑它的要求。在这种情况下,PHP没有任何原生可用于此目的。你必须自己动手。
您可以通过简单地使用Zend_Config_Ini来节省自己吨的时间。我知道你声明你不想使用任何其他东西,但Zend Framework的结构允许你使用你需要的任何部分。 Zend_Config可以单独使用。您当然可以将这几个类添加到项目中,让它们处理您的INI文件解析。
以下是使用上述示例的示例:
[config]
Database.AccessSettings.Username = myDBUsername
Database.AccessSettings.Password = myDBPassword
您可以像下面这样加载和访问它:
$config = new Zend_Config_Ini('/path/to/ini', 'config');
echo $config->Datbase->AccessSettings->Username; // prints "myDBUsername"
echo $config->Datbase->AccessSettings->Password; // prints "myDBPassword"
要编辑和保存配置,您将使用以下内容:
$config->Database->AccessSettings->Password = "foobar";
$writer = new Zend_Config_Writer_Ini(array('config' => $config,
'filename' => 'config.ini'));
$writer->write();
修改强>
不确定为什么人们根据vog误导的评论对此进行投票。通过使用独占锁来使多个人可写这个是非常简单的。 Zend_Config_Writer使用file_put_contents来编写,其中始终支持LOCK_EX标志,该标志专门锁定文件以进行写入。使用此标志时,不能让多个写入程序同时尝试更新文件。
要将此标志与Zend_Config_Writer一起使用,它就像下面这样简单:
$writer = new Zend_Config_Writer_Ini(array('config' => $config,
'filename' => 'config.ini'));
$writer->setExclusiveLock(true);
$writer->write();
另一种语法:
$writer = new Zend_Config_Writer_Ini();
$writer->write('config.ini', $config, true); // 3rd parameter is $exclusiveLock
答案 1 :(得分:0)
如果您不是手动编辑,请使用序列化数据。
使用serialize编写配置:
file_put_contents('myConfig.txt', serialize($Settings));
使用unserialize阅读配置:
$Settings = unserialize(file_get_contents('myConfig.txt'));
您可以使用PHP魔术函数__get()和__set()编写一个用于修改和获取此数据值的类。
答案 2 :(得分:0)
如果您愿意放入图书馆,可以使用Spyc并将您的配置放在YAML文件中。
您也可以使用PHP's support for SQLite,这意味着您的数据库只是一个文件,因此不需要数据库服务器。
答案 3 :(得分:0)
DBM文件可能不是一个坏主意。 PHP内置了对各种DBM文件类型的支持: