HelloCSE/app/Http/Utility/hostUtility.php
2024-04-10 13:56:22 +02:00

222 lignes
8 Kio
PHP

<?php
namespace App\Http\Utility;
/**
* Classe contenant quelques fonctions utiles concernant l'hôte
*/
class hostUtility{
/**
* Récupère le nom d'hôte
*
* @return string : Nom de l'hôte
*/
public static function getBaseUrl(){
return self::getUriProtocol().'://'.self::getHostName();
}
/**
* Récupère le nom d'hôte
*
* @return string : Nom de l'hôte
*/
public static function getHostName(){
return filter_input(INPUT_SERVER,'HTTP_HOST',FILTER_SANITIZE_URL);
}
/**
* Récupère l'IP de l'hôte
*
* @return string : Adresse IP
*/
public static function getIP(){
return filter_input(INPUT_SERVER,'REMOTE_ADDR',FILTER_SANITIZE_STRING);
}
/**
* Récupère la page courante de l'url
*
* @return string : page en cours
*/
public static function getPageLocation($defaultPageLocation='index.php'){
$requestURI = filter_input(INPUT_SERVER,'REQUEST_URI',FILTER_SANITIZE_URL);
$requestURIWithoutQueryString = strtok($requestURI,'?');
$curPathPageLocationURI = trim($requestURIWithoutQueryString,'/');
$arrCurPageLocationURI = explode('/',$curPathPageLocationURI);
$curPageLocation = end($arrCurPageLocationURI);
return ($curPageLocation=='') ? $defaultPageLocation : $curPageLocation;
}
/**
* Récupère le chemin de la page courante de l'url
*
* @return string : chemin page en cours
*/
public static function getUriPageLocation($defaultUriPageLocation='index.php'){
$requestURI = filter_input(INPUT_SERVER,'REQUEST_URI',FILTER_SANITIZE_URL);
$requestURIWithoutQueryString = strtok($requestURI,'?');
$curUriPageLocation = trim($requestURIWithoutQueryString,'/');
return ($curUriPageLocation=='') ? $defaultUriPageLocation : $curUriPageLocation;
}
/**
* Récupère le port utilisé par la machine cliente
*
* @return int : n° de port
*/
public static function getRemotePort(){
return filter_input(INPUT_SERVER,'REMOTE_PORT',FILTER_SANITIZE_NUMBER_INT);
}
/**
* Récupère l'URI qui a été fourni pour accéder à la page courante
*
* @param boolean $urlEncode : Indique si la chaîne de retour doit être
* encodée, ou non, via urlencode().
* @return string : URI de la page courante.
*/
public static function getRequestUri($urlEncode=true){
$requestURI = filter_input(INPUT_SERVER,'REQUEST_URI',FILTER_SANITIZE_URL);
$str = trim($requestURI,'/');
return ($urlEncode===true) ? urlencode($str) : $str;
}
/**
* Récupère le port utilisé par le serveur
*
* @return int : n° de port
*/
public static function getServerPort(){
return filter_input(INPUT_SERVER,'SERVER_PORT',FILTER_SANITIZE_NUMBER_INT);
}
/**
* Récupère le protocole utilisé par le serveur
*
* @return string : http / https
*/
public static function getUriProtocol(){
return ((filter_input(INPUT_SERVER, 'HTTPS', FILTER_SANITIZE_STRING) === 'on') || self::getServerPort() === 443) ? 'https' : 'http';
}
/**
* Récupère le nom du client HTML utilisé pour voir la page courante.
*
* @return string : Nom du navigateur
*/
public static function getUserAgent(){
return filter_input(INPUT_SERVER,'HTTP_USER_AGENT',FILTER_SANITIZE_STRING);
}
/**
* Récupère l'IP de l'hôte
*
* @param int $level 1-4 : Indique combien de blocs de l'adresse IP
* doivent être retournés. 4 retourne toute l'IP,
* 1 uniquement les premiers chiffres.
* @return string : Adresse IP (partielle) depuis REMOTE_ADDR
*/
public static function getIPPartLevel($level){
$IP = self::getIP();
if ($level >= 4) {
return $IP;
} else {
$IPparts = explode('.', $IP);
for ($bloc = 4; $bloc > $level; $bloc--) {
unset($IPparts[$bloc - 1]);
}
return implode('.', $IPparts);
}
}
/**
* Récupère le nom d'hôte
*
* @return string : Nom de l'hôte
*/
public static function setLocation($page=''){
$location = self::getBaseUrl();
$location .= (is_null($page) || trim($page) == '') ? '' : '/'.trim($page,'/');
header('Location: '.$location);
}
/**
* Récupère la valeur d'un paramètre passé en GET
*
* @return mixed : Soit une chaîne, soit un tableau;
*/
public static function _GET($var = null) {
$val = ($var === null) ? $_GET : (empty($var) ? null : $_GET[$var]);
return (isset($val) && !is_array($val)) ? (string)$val : $val;
}
/**
* Récupère la valeur d'un paramètre passé en POST
*
* @return mixed : Soit une chaîne, soit un tableau;
*/
public static function _POST($var = null) {
$val = ($var === null) ? $_POST : (empty($var) ? null : $_POST[$var]);
return (isset($val) && !is_array($val)) ? (string)$val : $val;
}
/**
* Vérification de l'IP de l'hôte en fonction d'une série d'IPs à
* comparer.
*
* @param mixed $IPs : Tableau d'IPs ou chaîne d'IPs à comparer.
* @return boolean : Vrai si l'IP correspond
*/
public static function checkIps($IPs){
$IP = self::getIP();
$arrIPs = (is_array($IPs)) ? $IPs : explode(',', $IPs);
$checked = true;
foreach($arrIPs as $ip){
$IPpartsSource = explode('.',$ip);
$IPpartsToCompare = explode('.',$IP);
$checked = true;
foreach($IPpartsSource as $bloc => $blocIpSource){
if ($blocIpSource != '*' && $blocIpSource != $IPpartsToCompare[$bloc]){
$checked = false;
break;
}
}
if ($checked) break;
}
return $checked;
}
/**
* Contruction d'une uri complète en fonction des données passées en
* paramètre.
*
* @param mixed $url : URL principale.
* @param mixed $queryData : Soit une chaîne, soit un tableau de
* paramètres servant à générer la queryString.
* @return mixed : Soit une URI, soit FALSE
*/
public static function buildUrl($url=null, $queryData = null){
if(!is_null($url)){
$queryString = '';
if (!empty($queryData)) {
$queryMark = strpos($url, '?') > 0 ? '&' : '?';
(is_string($queryData)) ? $queryString .= $queryMark . $queryData : null;
(is_array($queryData)) ? $queryString .= $queryMark . http_build_query($queryData, '', '&') : null;
}
return $url . $queryString;
}else{
return false;
}
}
}