PHP Classes

File: openswoole_html/session_index.php

Recommend this page to a friend!
  Packages of Ramesh Narayan Jangid (Sharma)   PHP Microservices Framework   openswoole_html/session_index.php   Download  
File: openswoole_html/session_index.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP Microservices Framework
Setup microservices apps with configuration arrays
Author: By
Last change: Refactoring
Refactoring
Refactoring
Date: 3 months ago
Size: 5,591 bytes
 

Contents

Class file image Download
<?php

/**
 * Session Index
 * php version 8.3
 * 
 * @category  Start
 * @package   Openswoole-Microservices
 * @author    Ramesh N. Jangid (Sharma) <polygon.co.in@gmail.com>
 * @copyright © 2026 Ramesh N. Jangid (Sharma)
 * @license   MIT https://opensource.org/license/mit
 * @link      https://github.com/polygoncoin/Openswoole-Microservices
 * @since     Class available since Release 1.0.0
 */

use Openswoole\Http\Server;
use Openswoole\Http\Request;
use Openswoole\Http\Response;

use Microservices\App\Constant;
use Microservices\App\Env;
use Microservices\App\HttpStatus;
use Microservices\App\Reload;
use Microservices\App\Start;
use Microservices\TestCase\Test;

define('ROOT', realpath(path: __DIR__ . DIRECTORY_SEPARATOR . '../'));
define('ROUTE_URL_PARAM', 'route');

require_once ROOT . DIRECTORY_SEPARATOR . 'Autoload.php';
spl_autoload_register(
    callback:  'Microservices\Autoload::register'
);

$server = new Server('127.0.0.1', 9501);

$server->on(
    'start',
    function(Server $server): void {
        echo 'Openswoole http server is started at http://127.0.0.1:9501' . "\n";
    }
);

$server->on(
    'request',
    function(Request $request, Response $response): void {
        global $DOMAIN_NAME;
        // echo $DOMAIN_NAME . PHP_EOL;

        // Load .env(s)
        foreach ([
            '.env',
            '.env.customer.container',
            '.env.global.container',
            '.env.rateLimiting',
            '.env.route'
        ] as $envFilename) {
            $envDataArray = parse_ini_file(
                filename: ROOT . DIRECTORY_SEPARATOR . $envFilename
            );
            foreach ($envDataArray as $envVarName => $envVarValue) {
                putenv(
                    assignment: "{$envVarName}={$envVarValue}"
                );
            }
        }

        Constant::init();
        Env::$timestamp = time();
        Env::init();

        $httpReqData = [];

        $httpReqData['streamData'] = Constant::$TRUE;
        $httpReqData['server']['domainName'] = $DOMAIN_NAME;
        $httpReqData['server']['httpRequestMethod'] = $request->server['request_method'];

        if (
            ((int)getenv('DISABLE_REQUESTS_VIA_PROXIES')) === 1
            && !isset($request->server['remote_addr'])
        ) {
            $response->end('Invalid request');
            return;
        }

        if (isset($request->server['remote_addr'])) {
            $httpReqData['server']['httpRequestIp'] = $request->server['remote_addr'];
        } else {// check proxy headers
            if (isset($request->header['x-forwarded-for'])) {
                $httpReqData['server']['httpRequestIp'] = $request->header['x-forwarded-for'];
            } elseif (isset($request->header['x-real-ip'])) {
                $httpReqData['server']['httpRequestIp'] = $request->header['x-real-ip'];
            }
        }

        $httpReqData['header'] = $request->header;
        if (isset($request->header['authorization'])) {
            $httpReqData['header']['tokenHeader'] = $request->header['authorization'];
        }
        $httpReqData['get'] = &$request->get;
        if (isset($httpReqData['get'][ROUTE_URL_PARAM])) {
            $httpReqData['get'][ROUTE_URL_PARAM] = '/' . trim(
                string: $httpReqData['get'][ROUTE_URL_PARAM],
                characters: '/'
            );
        } else {
            $response->end('Missing route');
            return;
        }
        // echo $httpReqData['get'][ROUTE_URL_PARAM] . PHP_EOL;

        $httpReqData['post'] = $request->rawContent();
        $httpReqData['files'] = &$request->files;
        $httpReqData['httpRequestHash'] = httpRequestHash(
            hashArray: [
                // $_SERVER['HTTP_ACCEPT_ENCODING'] ?? '',
                // $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '',
                // $_SERVER['HTTP_ACCEPT'] ?? '',
                // $_SERVER['HTTP_USER_AGENT'] ?? ''
            ]
        );

        if (
            isset($httpReqData['get'][ROUTE_URL_PARAM])
            && in_array(
                needle: $httpReqData['get'][ROUTE_URL_PARAM],
                haystack: [
                    '/all-test',
                    '/auth-test',
                    '/open-test',
                    '/open-test-xml',
                    '/supp-test'
                ],
                strict: Constant::$TRUE
            )
        ) {
            $testObject = new Test($httpReqData);
            switch ($httpReqData['get'][ROUTE_URL_PARAM]) {
                case '/all-test':
                    $response->end('<pre>'.print_r(value: $testObject->processAllTest(), return: Constant::$TRUE));
                    break;
                case '/auth-test':
                    $response->end('<pre>'.print_r(value: $testObject->processPrivate(), return: Constant::$TRUE));
                    break;
                case '/open-test':
                    $response->end('<pre>'.print_r(value: $testObject->processPublic(), return: Constant::$TRUE));
                    break;
                case '/open-test-xml':
                    $response->end('<pre>'.print_r(value: $testObject->processPublicXml(), return: Constant::$TRUE));
                    break;
                case '/supp-test':
                    $response->end('<pre>'.print_r(value: $testObject->processPrivateSupplement(), return: Constant::$TRUE));
                    break;
            }
        } else {
            if (
                Env::$enableReloadRequest
                && $httpReqData['get'][ROUTE_URL_PARAM] === '/' . Env::$reloadRequestRoutePrefix
            ) {
                Reload::process(
                    httpRequestIp: $httpReqData['server']['httpRequestIp']
                );
                $response->end();
            } else {
                ob_start();
                [
                    $responseHeaderArray,
                    $responseContent,
                    $responseCode
                ] = Start::http(
                    httpReqData: $httpReqData
                );
                @ob_clean();

                $responseCode = $responseCode ?? HttpStatus::$Ok;
                $response->status($responseCode);

                foreach ($responseHeaderArray as $headerName => $headerValue) {
                    $response->header(
                        $headerName,
                        $headerValue
                    );
                }
                $response->end($responseContent);
            }
        }
    }
);

/*
 * https://openswoole.com/docs/modules/swoole-server/configuration
 */
$server->set(
    [
        // Disable Coroutines for Traditional PHP Sessions
        'enable_coroutine' => Constant::$FALSE,
    ]
);

$server->start();

/**
 * Unique HTTP request hash
 * 
 * @param array $hashArray Hash array
 * 
 * @return string
 */
function httpRequestHash(
    $hashArray
): string {
    return md5(
        json_encode(
            value: $hashArray
        )
    );
}