EnvironmentHelper

Introduction

The EnvironmentHelper class in JiFramework provides a collection of utility methods for accessing and managing server and request environment information. It centralizes common environment-related tasks, making it easier for developers to retrieve data such as the user's IP address, request method, server information, and more.

By using the EnvironmentHelper class, developers can:

  • Retrieve User Information: Get the client's IP address and request method.
  • Access Server Data: Obtain server software details, PHP version, and other server variables.
  • Handle Request Headers: Fetch all request headers in an associative array.
  • Simplify Environment Access: Use a single class to access various environment details instead of dealing with superglobals directly.

Usage:

// Option 1: Initialize the EnvironmentHelper through the App
use JIFramework\Core\App\App;
$app = new App();
$environment = $app->environment;

OR 

// Option 2: Directly instantiate the Encryption
use JIFramework\Core\Utilities\Environment;
$environmen = new EnvironmentHelper();

Explanation:

  • Option 1: Initializes the App class and retrieves the EnvironmentHelper instance through it, using the framework's main entry point.
  • Option 2: Directly creates a EnvironmentHelper instance.

getCurrentScriptName()

Method: getCurrentScriptName(): string

Description: Retrieves the name of the currently executing script.

Parameters: None

Returns: A string representing the script name.

Usage:

$scriptName = $environment->getCurrentScriptName();

echo 'Current Script: ' . $scriptName;

// Example output:
// Current Script: index.php

Explanation:

  • Uses $_SERVER['PHP_SELF'] to get the full path and filename of the currently executing script.
  • Applies basename() to extract the filename from the path.
  • Useful for logging, debugging, or displaying the current script name.

getUserIp()

Method: getUserIp(): string

Description: Retrieves the client's IP address, accounting for shared internet, proxies, and direct connections.

Parameters: None

Returns: A string containing the user's IP address, or an empty string if not found.

Usage:

$clientIp = $environment->getUserIp();

echo 'Client IP: ' . $clientIp;

// Example output:
// Client IP: 203.0.113.42

Explanation:

  • Checks various server variables to determine the client's IP address:
    • HTTP_CLIENT_IP: IP address from shared internet or ISP.
    • HTTP_X_FORWARDED_FOR: IP addresses when passing through proxies (may contain multiple IPs).
    • REMOTE_ADDR: Direct IP address of the client.
  • Filters and validates IP addresses using filter_var() with FILTER_VALIDATE_IP.
  • Returns the first valid IP address found.
  • Essential for logging, security checks, and access control.

getServerInfo()

Method: getServerInfo(): array

Description: Retrieves key server information in an associative array.

Parameters: None

Returns: An array containing server information.

Usage:

$serverInfo = $environment->getServerInfo();

print_r($serverInfo);

/* Example output:
Array
(
    [server_software] => Apache/2.4.41 (Unix)
    [server_protocol] => HTTP/1.1
    [document_root] => /var/www/html
    [remote_addr] => 203.0.113.42
    [request_method] => GET
    [request_uri] => /index.php
    [query_string] => id=5&name=John
)
*/

Explanation:

  • Retrieves server variables using $_SERVER superglobal:
    • SERVER_SOFTWARE: Server identification string.
    • SERVER_PROTOCOL: Name and revision of the information protocol.
    • DOCUMENT_ROOT: The document root directory under which the current script is executing.
    • REMOTE_ADDR: The IP address from which the user is viewing the current page.
    • REQUEST_METHOD: The request method used to access the page (e.g., GET, POST).
    • REQUEST_URI: The URI which was given to access the page.
    • QUERY_STRING: The query string, if any, via which the page was accessed.
  • Uses null coalescing operator ?? to provide empty strings if variables are not set.
  • Useful for debugging, logging, or dynamically adjusting application behavior based on server info.

getPhpVersion()

Method: getPhpVersion(): string

Description: Retrieves the current PHP version.

Parameters: None

Returns: A string representing the PHP version.

Usage:

$phpVersion = $environment->getPhpVersion();

echo 'PHP Version: ' . $phpVersion;

// Example output:
// PHP Version: 7.4.3

Explanation:

  • Uses the built-in phpversion() function to get the PHP version.
  • Helpful for logging, compatibility checks, or displaying system information.

getRequestHeaders()

Method: getRequestHeaders(): array

Description: Retrieves all HTTP request headers as an associative array.

Parameters: None

Returns: An array containing request headers.

Usage:

$requestHeaders = $environment->getRequestHeaders();

print_r($requestHeaders);

/* Example output:
Array
(
    [Host] => www.example.com
    [User-Agent] => Mozilla/5.0 (Windows NT 10.0; Win64; x64)
    [Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [Accept-Language] => en-US,en;q=0.5
    [Accept-Encoding] => gzip, deflate
    [Connection] => keep-alive
)
*/

Explanation:

  • Checks if the getallheaders() function exists (available in Apache).
  • If available, uses getallheaders() to retrieve the headers.
  • If not, manually constructs the headers array by parsing $_SERVER variables starting with HTTP_.
  • Converts header names to the standard format (e.g., HTTP_USER_AGENT to User-Agent).
  • Useful for inspecting request headers, implementing custom authentication, or debugging.

getRequestMethod()

Method: getRequestMethod(): string

Description: Retrieves the HTTP request method used to access the page (e.g., GET, POST).

Parameters: None

Returns: A string representing the request method.

Usage:

$requestMethod = $environment->getRequestMethod();

echo 'Request Method: ' . $requestMethod;

// Example output:
// Request Method: POST

Explanation:

  • Accesses $_SERVER['REQUEST_METHOD'] to get the request method.
  • Defaults to 'GET' if the variable is not set.
  • Useful for handling different request types in routing or controller logic.