🔗 Project on GitHub
View the full source code and contribute on GitHub:
https://github.com/BcommeBois/oihana-php-system
✨ Features
- Bootstrap helpers: initialize timezone, memory limit, error handling, and safe
ini_sethelpers - Configuration: load TOML configuration files with sensible fallbacks
- Dependency Injection: convenience functions for building a PHP-DI container and loading definitions
- Logging: PSR-3 compatible lightweight file logger, plus Monolog config enums
- HTTP helpers: constants for methods, headers and parameter strategies
- MySQL utilities: DSN builder and a robust
PDOconnection builder with safe defaults - Date utilities:
TimeIntervalto parse, format and convert durations
🚀 Quick start
require __DIR__ . '/vendor/autoload.php';
use function oihana\init\{ initDefaultTimezone, initMemoryLimit, initErrors, initConfig, initDefinitions, initContainer };
use oihana\logging\Logger;
use oihana\db\mysql\MysqlPDOBuilder;
// Bootstrap
initDefaultTimezone('UTC');
initMemoryLimit('256M');
initErrors([
'display_errors' => '1',
'error_log' => 'var/logs/php_errors.log',
], __DIR__);
// Load config and build the DI container
$config = initConfig(__DIR__ . '/config', 'app.toml');
$definitions = initDefinitions(__DIR__ . '/definitions');
$container = initContainer($definitions, ['config' => $config]);
// Logger
$logger = new Logger(__DIR__ . '/var/logs', Logger::DEBUG);
$logger->info('Application started');
// MySQL PDO
$pdo = (new MysqlPDOBuilder([
'host' => '127.0.0.1',
'dbname' => 'demo',
'username' => 'root',
'password' => 'secret',
]))();
📦 Installation
This library requires PHP 8.4+ and is installed via Composer:
composer require oihana/php-system
🧰 Usage
Init helpers
use function oihana\init\{ initDefaultTimezone, initMemoryLimit, initErrors, setIniIfExists };
initDefaultTimezone('UTC');
initMemoryLimit('512M');
initErrors([
'display_errors' => '1',
'display_startup_errors' => '1',
'error_log' => 'var/logs/php_errors.log',
], __DIR__);
// Safe ini_set wrapper (no-op on empty values)
setIniIfExists('upload_max_filesize', '64M');
Configuration and DI container
use function oihana\init\{ initConfig, initDefinitions, initContainer };
$config = initConfig(__DIR__ . '/config', 'app.toml');
$definitions = initDefinitions(__DIR__ . '/definitions');
$container = initContainer($definitions, ['config' => $config]);
Logging (PSR-3)
use oihana\logging\Logger;
$logger = new Logger(__DIR__ . '/var/logs', Logger::INFO);
$logger->info('App started');
$logger->error('An error occurred: {error}', ['error' => 'boom']);
// Optional helpers
$logger->clear();
$files = $logger->getLogFiles();
MySQL PDO builder
use oihana\db\mysql\MysqlPDOBuilder;
$pdo = (new MysqlPDOBuilder([
'host' => 'localhost',
'dbname' => 'test_db',
'username' => 'user',
'password' => 'secret',
// 'validate' => false, // disable validation if needed
// 'skipDbName' => true, // build DSN without dbname
]))();
HTTP helpers
use oihana\http\{ HttpMethod, HttpHeaders, HttpParamStrategy };
$method = HttpMethod::POST;
$header = HttpHeaders::CONTENT_TYPE;
$strategy = HttpParamStrategy::BOTH; // read from body and query
TimeInterval (durations)
use oihana\date\TimeInterval;
$d = new TimeInterval('1h 2m 5s');
echo $d->humanize(); // 1h 2m 5s
echo $d->formatted(); // 1:02:05
echo $d->toSeconds(); // 3725
✅ Running Unit Tests
Run all unit tests:
composer run-script test
Run a specific test:
composer run test ./tests/oihana/date/TimeIntervalTest.php
📄 License
This project is licensed under the Mozilla Public License 2.0 (MPL-2.0).
👤 About the Author
- Name: Marc ALCARAZ (aka eKameleon)
- Website: www.ooop.fr
- Email: marc@ooop.fr