https://github.com/pear/config_lite
a lightweight package for ini style configuration/settings text files.
https://github.com/pear/config_lite
Last synced: 11 months ago
JSON representation
a lightweight package for ini style configuration/settings text files.
- Host: GitHub
- URL: https://github.com/pear/config_lite
- Owner: pear
- Created: 2010-10-19T10:19:04.000Z (almost 16 years ago)
- Default Branch: master
- Last Pushed: 2021-05-05T16:24:56.000Z (about 5 years ago)
- Last Synced: 2024-12-07T16:33:43.876Z (over 1 year ago)
- Language: PHP
- Homepage: http://pear.php.net/package/Config_Lite
- Size: 157 KB
- Stars: 40
- Watchers: 20
- Forks: 15
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Config_Lite
===========
[](https://travis-ci.org/pear/Config_Lite)
Description
-----------
a simple, lightweight and fast class for ini style configuration files,
with the native PHP function `parse_ini_file' under the covers.
Config_Lite is inspired by Pythons ConfigParser.
A "Config_Lite" file consists of global key/value pair (KVP) entries and optional sections,
"[section]", followed by "name = value" (KVP) entries.
Installation
------------
*Pear*
`pear install Config_Lite-beta`
*Composer*
__Create a composer.json file and run `composer install`__
```
{
"repositories": [
{
"type": "pear",
"url": "pear.php.net"
}
],
"require": {
"pear-pear.php.net/config_lite": "*"
}
}
```
__Composers autoload example usage__
```php
get('db', 'user'); // dionysis
echo $config->get(null, 'public_key_file'); // ~/.ssh/id_rsa.pub
if (true === $config->getBool(null, 'debug', true)) {
echo $config;
}
// read with ArrayAccess
echo $config['db']['password']; // c2oiVnY!f8sf
```
__Save Configuration file:__
```php
set('db', 'user', 'JohnDoe')
->set('db', 'password', 'd0g1tcVs$HgIn1');
// set with ArrayAccess
$config['public_key_file'] = '~/.ssh/id_rsa.pub';
$config['general'] = array('lang' => 'de');
// save object to file
$config->save();
```
__Create configuration file:__
```php
$config = new Config_Lite('test.ini');
$config->set('db', 'user', 'JohnDoe')
->set('db', 'password', 'd0g1tcVs$HgIn1');
// set global bool 'debug'
$config->set(null, 'debug', false);
// save object to file
try {
$config->save();
} catch (Config_Lite_Exception $e) {
echo "\n", 'Exception Message: ', $e->getMessage();
}
```
__Alternative file creation with write:__
```php
write($filename, array(
'public_key_file' => "~/.ssh/id_rsa.pub",
'general' => array(
'lang' => 'fr'
),
'db' => array(
'user' => 'dionysis',
'password' => 'd0g1tcVs$HgIn1'
)
)
);
} catch (Config_Lite_Exception $exception) {
printf("Failed to write file: %s.\n", $filename);
printf("Exception Message: %s\n", $exception->getMessage());
printf("Exception Stracktrace: %s\n", $exception->getTraceAsString());
}
```
__Config without File - Streams, Filter or stdout:__
```php
write($filename, array(
'public_key_file' => "~/.ssh/id_rsa.pub",
'general' => array(
'lang' => 'fr'
),
'db' => array(
'user' => 'dionysis',
'password' => 'd0g1tcVs$HgIn1'
)
)
);
// Writing to stdout
$config->write("php://stdout", array(
'public_key_file' => "~/.ssh/id_rsa.pub",
'general' => array(
'lang' => 'fr'
),
'db' => array(
'user' => 'dionysis',
'password' => 'd0g1tcVs$HgIn1'
)
)
);
```
__global Configuration options (without sections) :__
```php
$config->set(null, 'private_key_file', '~/.ssh/id_rsa');
// set with arrayaccess
$config['public_key_file'] = '~/.ssh/id_rsa.pub';
$config->sync();
echo $config->get(null, 'public_key_file');
// get with arrayaccess
echo $config['private_key_file'];
```
__implemented IteratorAggregate, allows iteratation of the object with foreach:__
```php
$config = new Config_Lite($filename);
foreach ($config as $section => $name) {
if (is_array($name)) {
$s .= sprintf("[%s]\n", $section);
foreach ($name as $key => $val) {
$s .= sprintf("\t%s = %s\n", $key, $val);
}
} else {
$s .= sprintf("%s=%s\n", $section, $name);
}
}
echo $s;
```
Options
-------
__setProcessSections(bool)__
Sets whether or not sections should be processed
If true, values for each section will be placed into
a sub-array for the section. If false, all values will
be placed in the global scope.
__setQuoteStrings(bool)__
Sets whether or not to doubleQuote
If true, everything but bool and numeric
values get doublequoted.
Notes & Limitations
-------------------
* Config_Lite is an OO frontend to `parse_ini_file` and writing ini files,
but you can also use the public method `write` if you only want to write an array as ini file
* Use getString and setString to save and read Strings with double _and_ single-quotes
* Use getBool if you need a real bool type, eg. for strict equality comparison
* The methods `set` and `get` keep values untouched, but the write method
normalize "bool" values to a human readable representation,
doublequotes strings and numeric values without any quotes
* newline chars defaults to "\n", editable with `setLinebreak'
* comments get dropped when writing after reading
* backslashes in doublequoted values get parsed, to omit this, use `$config->read('/test.cfg', INI_SCANNER_RAW);`
* no support of comments and multiline strings, because reading with `parse_ini_file` does not support it
If you want to save userinput like images, i'd recommend to use `get` with `base64_decode` and `set` with `base64_encode`.
For a regex one could also use `setSingleTickDelimiter()`.
__Save regex (as global option) base64 encoded :__
```php
set(null, 'regex', base64_encode($regex));
// save object, here sync to read it back, just to test
$config->sync();
// in 'regex-test.ini': regex = "L0hlbGxvIFwiKC4qPylcIi8="
$regex = base64_decode($config->get(null, 'regex'));
if (preg_match($regex, 'Hello "World"!')) {
printf("matched. regex:%s", $regex);
} else {
printf("no match found. regex:%s", $regex);
}
```
IDEAS
------
* Config_Lite_Ini ( https://github.com/pce/Config_Lite_Ini ) with metainfos to supports global sections,
* support of comments and multiline strings (both supported by Pear::Config)
Credits
-------
- @see [contributors](https://github.com/pce/config_lite/graphs/contributors)
- [mfonda](https://github.com/mfonda) ensured toString and output are equal, added accessors and options
- [CloCkWeRX](https://github.com/CloCkWeRX) improvements and Jenkins Integration
- [cweiske](https://github.com/cweiske) for various suggestions
Contributing
------------
*Patches are Welcome!*
Create an Issue with a Link to your forked branch.
https://github.com/pce/config_lite
or report bugs at:
http://pear.php.net/package/Config_Lite