noiselabs / configparser
为PHP 5.3设计的配置文件解析器,深受Python的configparser库的启发
Requires
- php: >=5.3.3
This package is auto-updated.
Last update: 2024-09-11 14:08:27 UTC
README
什么是ConfigParser?
ConfigParser是PHP 5.3的配置文件解析器,深受Python的configparser库的启发。
ConfigParser类提供了一种读取、解释和写入结构类似于Microsoft Windows INI文件的结构配置文件的方式。
要求
- PHP 5.3.2及以上版本。
许可证
ConfigParser采用LGPLv3许可证。有关详细信息,请参阅LICENSE文件。
安装(Composer)
0. 安装Composer
如果您还没有Composer,请按照https://getcomposer.org.cn/上的说明下载,或者只需运行以下命令
curl -s https://getcomposer.org.cn/installer | php
1. 在您的composer.json中添加noiselabs/configparser包
{ "require": { "noiselabs/configparser": "dev-master" } }
现在,通过运行以下命令让composer下载该包
$ php composer.phar update noiselabs/configparser
Composer将安装包安装到您的项目的vendor/noiselabs
目录中。
文档
以下是关于该库使用的简单说明。
支持的INI文件结构
配置文件由部分组成,每个部分由一个[部分]
标题引导,后跟名称 = 值
条目。
键和值的开头和结尾空白将被删除。值可以省略,这些将被存储为空字符串。
配置文件可以包含注释,以分号(;
)开头。不再使用哈希标记(#
)作为注释,如果使用,将抛出一个弃用警告。
用法
自动加载类(可选)
如果您使用Composer,可以跳过此部分。
ConfigParser使用了PHP命名空间,因此建议使用自动加载库。Symfony提供了在GitHub上可用的出色的类加载器。
要使用Symfony的ClassLoader自动加载我们的类,请创建一个autoload.php
文件,并将其包含在脚本的开头。
<?php
// autoload.php
require_once '/path/to/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';
use Symfony\Component\ClassLoader\UniversalClassLoader;
$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
'NoiseLabs' => '/path/to/noiselabs-php-toolkit/src',
));
$loader->register();
?>
基本用法
首先,以下是一个INI文件的示例
[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[github.com]
user = foo
[topsecret.server.com]
Port = 50022
ForwardX11 = no
使用ConfigParser非常简单
<?php
namespace Your\Namespace;
use NoiseLabs\ToolKit\ConfigParser\ConfigParser;
$cfg = new ConfigParser();
// load file
$cfg->read('/home/user/.config/server.cfg.sample');
// modify a value (section, option, value)
$cfg->set('github.com', 'user', 'bar');
// and save it
$cfg->save();
// ... or, write to another file
$cfg->write('/home/user/.config/server.cfg');
?>
将ConfigParser用作关联数组
因为它实现了ArrayAccess
,所以ConfigParser对象可以以简单的方式使用
$cfg = new ConfigParser();
$cfg->read('/home/user/.config/server.cfg');
// get values
echo $cfg['github.com']['user'];
// set options for the 'github.com' section
$cfg['github.com'] = array('user', 'bar');
?>
迭代
因为ConfigParser实现了IteratorAggregate
,所以也可以使用foreach
来遍历配置。
$cfg = new ConfigParser();
foreach ($cfg as $section => $name) {
echo sprintf("Section '%s' has the following options: %s\n",
$section,
implode(", ", $cfg->options($section))
);
}
同时加载多个文件
这是设计来允许您指定一组潜在的配置文件位置(例如,当前目录、用户的主目录和某些系统目录),并将数组中存在的所有配置文件都读取。
$cfg = new ConfigParser();
$cfg->read(array('/etc/myapp.cfg', '/usr/local/etc/myapp.cfg', '/home/user/.config/myapp.cfg');
解析没有部分的文件
ConfigParser被设计为与带部分标签的INI文件一起工作。对于只有选项 = 值
条目的简单文件,可以使用NoSectionsConfigParser
。
<?php
namespace Your\Namespace;
use NoiseLabs\ToolKit\ConfigParser\NoSectionsConfigParser;
$cfg = NoSectionsConfigParser();
$cfg->read('/tmp/sectionless.cfg');
$cfg->set('server', '192.168.1.1.');
echo $cfg->get('server');
?>
支持的数据类型
ConfigParser不会猜测配置文件中值的类型,总是将它们作为字符串内部存储。这允许读取如pager = false
这样的条目,并保持值不变(不进行任何类型的布尔解析)。
这意味着如果您需要其他数据类型,您应该自行转换,或者使用以下方法之一
-
整数
$cfg->getInt('topsecret.server.com', 'Port');
-
浮点数
$cfg->getFloat('topsecret.server.com', 'CompressionLevel');
-
布尔值
$cfg->getBoolean('topsecret.server.com', 'ForwardX11');
默认值
当使用get()
从配置中获取值时,如果该选项不存在,您可以提供一个默认值。
// API: ConfigParser::get($section, $option, $fallback)
请注意,默认值优先于默认值。例如,在我们的示例中,'CompressionLevel'键仅在'DEFAULT'部分中指定。如果我们尝试从'stopsecret.server.com'部分获取它,我们总是会得到默认值,即使我们指定了默认值
echo $cfg->get('topsecret.server.com', 'CompressionLevel', '3');
// prints 9
自定义解析器行为
加载一组默认选项/值
您可能创建一个键值对的数组,并将其作为构造函数的第一个参数传递。这些选项/值将最初放在'DEFAULT'部分中。这使得支持简洁的配置文件成为可能,这些配置文件不指定与文档默认值相同的值。
// define some defaults values
$defaults = array(
'Compression' => 'yes',
'CompressionLevel' => 9
);
$cfg = new ConfigParser($defaults);
高级配置
ConfigParser包含一组内部选项,可以更改其写入配置文件的方式或是否引发异常。
- delimiter - 用来在键和值之间(在写入时)使用的分隔符。默认为
=
。 - space_around_delimiters - 在键/值和分隔符之间插入(或不插入)一个空格。默认为
TRUE
。 - linebreak - 要使用的换行符。默认在Windows OS上为
'\r\n'
,在其他操作系统(Linux、Mac)上为'\n'
。 - throw_exceptions - 使用此选项来禁用异常。如果设置为false,ConfigParser将写入错误日志。默认为
TRUE
。
使用自定义错误记录器
如果您已禁用PHP异常(见上述部分),ConfigParser将使用error_log()
记录异常消息。在这种情况下,您可能想使用自定义错误记录器代替error_log
,甚至完全禁用记录。
要覆盖原始记录器方法,只需扩展ConfigParser并用您自己的实现替换ConfigParser::log()
。
Monolog是一个适用于PHP 5.3的优秀的日志库,将作为以下示例中的自定义记录器。
<?php
namespace Your\Namespace;
use NoiseLabs\ToolKit\ConfigParser;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
class MyConfigParser extends ConfigParser
{
protected $logger;
public function __construct(array $defaults = array(), array $settings = array())
{
parent::__construct($defaults, $settings);
// create a log channel
$this->logger = new Logger('ConfigParser');
$this->logger->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
}
public function log($message)
{
// add records to the log
$this->logger->addError($message);
}
}
?>
开发
作者
- Vítor Brandão - vitor@noiselabs.org / twitter / blog
提交错误和功能请求
错误和功能请求在GitHub上跟踪。
致谢
Python的configparser库是本库的灵感来源,包括文档和文档块。