peterujah/php-cli-session

A PHP library for managing and inspecting CLI session environments across platforms.

1.0.0 2025-07-26 11:37 UTC

This package is auto-updated.

Last update: 2025-07-26 11:44:47 UTC


README

A lightweight utility class to manage and inspect CLI session environments in PHP.
Designed for cross-platform compatibility (Linux, macOS, Windows) with focus on stream handling, session identification, terminal capability detection, and environmental diagnostics.

No external dependencies. Built for PHP 7+

Features

  • Detects and resolves STDIN, STDOUT, STDERR in CLI environments
  • Handles platform-specific stream opening safely
  • Retrieves:
    • Terminal size (height and width)
    • Current user (whoami)
    • MAC address
    • OS and system model
    • Shell and terminal name
  • Detects:
    • ANSI and color support
    • Platform type (Windows, macOS, Linux, cloud)
  • Generates a unique system identifier for CLI sessions
  • Silently handles errors using proper fallbacks

Installation

Install via Composer PHP package manager.

composer require peterujah/php-cli-session

Usage

Initialize CLI streams

use Peterujah\Cli\System\Session;

Session::init(); // Optional if constructor is called

Start PHP session with CLI-safe ID

$sessionId = Session::getSystemId();
session_id($sessionId);
session_start();

See working example CLI Demos

Examples

Get CLI terminal info

$info = Session::getSystemInfo();

foreach ($info as $item) {
    echo $item['Name'] . ': ' . $item['Value'] . PHP_EOL;
}

Detect color and ANSI support

if (Session::isColorSupported()) {
    echo "✅ Color output is supported." . PHP_EOL;
}

if (Session::isAnsiSupported()) {
    echo "✅ ANSI escape sequences are supported." . PHP_EOL;
}

Detect terminal dimensions

$width = Session::getWidth();
$height = Session::getHeight();

echo "Terminal Size: {$width} x {$height}" . PHP_EOL;

Methods Overview

Method Description
init() Initializes CLI stream resources (STDIN, STDOUT, etc.)
getSystemId() Returns a unique, hash-based identifier for the current system
getSystemInfo() Returns structured system diagnostics
getTerminalName() Returns terminal name (tty, PowerShell, etc.)
getMacAddress() Retrieves system MAC address
getPid() Gets the parent process ID
whoami() Gets the current user executing the script
isColorSupported() Checks if terminal supports color output
isAnsiSupported() Checks if terminal supports ANSI escape codes
getWidth() / getHeight() Gets terminal width and height
isPlatform($os) Checks for OS platform or cloud environment

Platform Compatibility

OS Status
Linux ✅ Tested
macOS ✅ Tested
Windows ✅ Tested
BSD/Unix ⚠️ Partial support
Docker ✅ Supported (if tput or stty available)

License

MIT License — use it, hack it, extend it.

TODO

  • Optional support for logging output to a file
  • Add unit tests
  • CLI command wrapper integration
  • PHP framework integration hook