phossa / phossa-config
Configuration management libraray for PHP
Installs: 124
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/phossa/phossa-config
Requires
- php: >=5.4.0
- phossa/phossa-shared: *
Requires (Dev)
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2025-10-26 00:56:05 UTC
README
See new lib at phoole/config
Introduction
phossa-config is a configuration management library for PHP. The design idea
is inspired by another github project mrjgreen/config but with lots of cool
features.
It requires PHP 5.4 and supports PHP 7.0+, HHVM. It is compliant with PSR-1, PSR-2, PSR-4.
Features
- 
One central place for all config files config/ | |____ production/ | | | |____ host1/ | | |___ redis.php | | |___ db.php | | | |____ db.php | |____ system.php |____ db.php |____ redis.php
- 
Use an environment value, e.g. productionorproduction/host1for switching betweendevelopment,stagingorproduction.
- 
Support .php,.json,.iniand.xmltype of configuration files.
- 
Reference is possible, such as ${system.tmpdir}in configuration file and environment file.
- 
On demand configuration loading (lazy loading). 
- 
Able to load all configuration files in one shot with $config->get(null)
- 
Configuration cache. 
- 
Hierachy configuration structure with dot notation like db.auth.host.// returns an array $db_config = $config->get('db'); // returns a string $db_host = $config->get('db.auth.host'); 
- 
Both flat notation and array notation fully supported and co-exist at the same time. // db config file return [ // array notation 'auth' => [ 'host' => 'localhost', 'port' => 3306 ], // flat notation 'auth.user' => 'dbuser' ]; 
- 
Un*x shell style environment file '.env' is supported with dereferencing feature and magic environment values like ${__DIR__}and${__FILE__}
Installation
Install via the composer utility.
composer require "phossa/phossa-config=1.*"
or add the following lines to your composer.json
{
    "require": {
      "phossa/phossa-config": "1.*"
    }
}
Usage
- 
Usually running environment is different for different servers. A good practice is setting environment in a .envfile in the installation root and put all configuration files in theconfig/directory.Sample .envfile,# debugging true|false, change to 'false' ON production server APP_DEBUG=true # App environment, change to 'prod' ON production server APP_ENV=dev # app root directory, default to current dir APP_ROOT=${__DIR__} # central configuration directory CONFIG_DIR=${APP_ROOT}/config In the bootstrap.phpfile,// load environment (new Phossa\Config\Env\Environment())->load(__DIR__.'/.env'); // create config object $config = new Phossa\Config\Config( getenv('CONFIG_DIR'), // loaded from .env file getenv('APP_ENV') // loaded from .env file ); // load all configs in one shot $conf_data = $config->get(null); 
- 
Configurations are grouped into groups, namely files. For example, the system.phpholds allsystem.*configurations// system.php return [ 'tmpdir' => '/usr/local/tmp', ... ]; Later, system related configs can be retrieved as $dir = $config->get('system.tmpdir'); Or being used in other configs as reference. 
- 
A cache pool can be passed to the config constructor to have it read all configs from the cache or save all configs to cache. // create config object $config = new Phossa\Config\Config( dirname(__DIR__) . '/config', // the config dir 'staging/server2', // config env 'php', // file type new Phossa\Config\Cache\Cache(__DIR__ . '/cache') // cache location ); // if cache exists, this will read all configs from the cache $conf_data = $config->get(null); // ... // write to cache $config->save(); - 
Pros of using caching - 
Speed up. Read from one file instead of lots of configuration files. 
- 
References like ${system.tmpdir}are done already.
 
- 
- 
Cons of using caching - 
Config data might be stale. need to using $config->save()to overwrite or$cache->clear()to clear the cache.
- 
Need write permission to a cache directory. 
- 
Might expose your configuration if you are not careful with cache data. 
 
- 
 
- 
- 
References make your configuration easy to manage. For example, in the system.php// group: system return [ 'tmpdir' => '/var/local/tmp', ... ]; In your cache.phpfile,// group: cache return [ // a local filesystem cache driver 'local' => [ 'driver' => 'filesystem', 'params' => [ 'root_dir' => '${system.tmpdir}/cache', 'hash_level' => 2 ] ], ... ]; You may reset the reference start and ending chars, // now reference is something like '%system.tmpdir%' $config = (new Config())->setReferencePattern('%', '%'); Or even disable the reference feature, // now reference is not recognised $config = (new Config())->setReferencePattern('', ''); 
- 
If the environment is set to production/host1, the precedence order is,- 
config/production/host1/db.phpover
- 
config/production/db.phpover
- 
config/config/db.php
 
- 
- 
- 
get($key, $default = null)$keyis the a flat notation likedb.auth.hostorNULLto get all of the configurations.$defaultis used if no configs found.Return value might be a stringorarraybase on the$key.
- 
set($key, $value)Set the configuration manually in this session. The value will NOT be reflected in any config files unless you modify config file manually. $valuecan be astringorarray.
- 
has($key)Test if $keyexists or not. Returns abooleanvalue.
- 
save()Save current full configurations into a cache. 
 
- 
Changes
- 1.0.6 added setReferencePattern(),hasReference()anddeReference()
Dependencies
- 
PHP >= 5.4.0 
- 
phossa/phossa-shared ~1.0.10