Helper Server.
Funciones para obtener datos del $_SERVER

Code Helper

Helpers – Server – $_SERVER

El servidor donde esta alojada la aplicación contiene mucha información que nos puede ayudar. Toda esta información se guarda en la variable superglobal $_SERVER la cual puede ser consultada con esta librería. Utiliza la función filter_input y filter_var para eliminar posibles errores.

/**
 * HelperServer.php
 * @author      Code Develium
 */

namespace Helpers;

/**
 * Class HelperServer
 */
abstract class HelpServer
{
    /**
     * Devuelve el valor de una variable del array superglobal 
     * $_SERVER
     * NOTA: filter_input para las opciones INPUT_SERVER y INPUT_ENV 
     * no funcionan para FASTCGI
     * Si la variable no existe, devuelve '' (string vacío)
     *
     * @param string $key
     *
     * @return string
     */
    public static function getValue($key)
    {
        if (filter_has_var(INPUT_SERVER, $key)) {

            $value = filter_input( INPUT_SERVER, 
                                   $key, 
                                   FILTER_SANITIZE_STRING);

        } else {

            $value = '';
            if (array_key_exists($key, $_SERVER)) {
                $value = filter_var( $_SERVER[ $key ], 
                                     FILTER_SANITIZE_STRING, 
                                     null);
            }
            return $value;
        }
        if ($value === false || is_null($value)) {
            return '';

        }
        return $value;
    }
    
    /**
     * Comprueba si el navegador soporta compresión con gzip
     * @return bool
     */
    public static function compresionZip()
    {
        $acceptEnc = HelpServer::getValue( 'HTTP_ACCEPT_ENCODING');

        return (stripos( $acceptEnc, 'gzip') >= 0 ||
                stripos($acceptEnc, 'x-gzip') >= 0 );
    }

    /**
     * Devuelve un valor de un parámetro de la query_string.
     * Devuelve null si no existe
     *
     * @param $parametro
     *
     * @return bool|mixed
     */
    public static function getQueryStringParam($parametro)
    {
        $matches = array();
        $qs      = self::getQueryString();
        $number  = preg_match( "/{$parametro}=([a-zA-Z0-9_-]+)[&]?/",
                               $qs, 
                               $matches);
        if ($number) {
            return ''.$matches[ 1 ];
        } else {
            return null;
        }
    }

    /**
     * Devuelve un array con los parametros y valores de la 
     * query_string
     * @return array
     */
    public static function getQueryStringParams()
    {
        $qs = self::getQueryString();
        if (HelpValidate::isEmpty($qs)) {
            return [];
        }
        $arrayTmp    = [];
        $arrayParams = explode('&', $qs);
        foreach ($arrayParams as $key => $value) {

            $b = explode('=', $arrayParams[ $key ]);

            $arrayTmp[ $b[ 0 ] ] = $b[ 1 ];
        }
        return $arrayTmp;
    }

    /**
     * Devuelve la query string completa de la url
     * @return string
     */
    public static function getQueryString()
    {
        return self::getValue('QUERY_STRING');
    }

    /**
     * Devuelve el Dominio Http/https del servidor
     * @return string
     */
    public static function getDominioHttp()
    {
        $httpHost = self::getValue('HTTP_HOST');
        if (empty($httpHost)) {
            return '';
        }
        $https = self::getValue('HTTPS');
        if (empty($https)) {
            $protocol = 'http';
        } else {
            $protocol = ($https != "off") ? "https" : "http";
        }
        return $protocol."://".$httpHost;
    }

    /**
     * Devuelve el path del servidor.
     * @return mixed
     */
    public static function getDocumentRoot()
    {
        return self::getValue('DOCUMENT_ROOT');
    }

    /**
     * Devuelve un array con todos los valores de la variable 
     * superglobal $_SERVER
     * NOTA: filter_input para las opciones INPUT_SERVER y INPUT_ENV 
     * no funcionan para FASTCGI
     * @return array
     */
    public static function getAllValues()
    {
        $ret = [];
        foreach (array_keys($_SERVER) as $key) {
            $exists = filter_has_var(INPUT_SERVER, $key);
            if ($exists) {
                $value = filter_input(INPUT_SERVER, $key);
            } else {
                $value = filter_var( $_SERVER[ $key ], 
                                     FILTER_DEFAULT, 
                                     null);
            }
            $ret[ $key ] = $value;
        }

        return $ret;
    }

    /**
     * Devuelve el usuario y contraseña procedentes del dialogo de 
     * autenticación.
     * $_SERVER['PHP_AUTH_USER'] y $_SERVER['PHP_AUTH_PW']
     *
     * @param string $usuario
     * @param string $psw
     */
    public static function getAutenticacion(&$usuario, &$psw)
    {
        $usuario = self::getValue('PHP_AUTH_USER');

        $psw = self::getValue('PHP_AUTH_PW');
    }

}