
🔗 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_set
helpers - 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
PDO
connection builder with safe defaults - Date utilities:
TimeInterval
to 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