Trovare il path assoluto della root in php

Sembra una cosa banale, in realtà ricavare le variabili del server in PHP in modo veloce e preciso non è sempre così immediato.

Infatti usando il classico $_SERVER[‘DOCUMENT_ROOT’] siamo legati alla posizione del file che lo invoca, per ottenere sempre il percorso assoluto della root dello spazio web, indipendentemente dalla nostra posizione, ci sono un paio di trucchetti che mi segno qua, come promemoria per i progetti futuri visto che servono spesso e volentieri.

Immaginiamo di partire da un file php tipo questo: /var/www/vhosts/miosito.com/httpdocs/testpath/getabsoluteroot.php e che lo spazio web sia accessibile tramite la porta 8080 (anzichè quella standard dell’http, l’80)

Ecco i risultati che vorrei facilmente ottenere:

Variabile Risultato
$base_dir /var/www/vhosts/miosito.com/httpdocs/testpath
$doc_root /var/www/vhosts/miosito.com/httpdocs
$base_url /testpath
$protocol http
$port 8080
$domain miosito.com
$domain_url http://www.miosito.com:8080
$full_url http://www.miosito.com:8080/mywebsite

Ovviamente la porta la vorrei solo in caso sia diversa da quelle standard (80 per http e 443 per https).

Come fare per ottenere tutto?

Ecco il codice che serve, funzionante in qualsiasi folder.

$base_dir  = __DIR__; 
$doc_root  = preg_replace("!${_SERVER['SCRIPT_NAME']}$!", '', $_SERVER['SCRIPT_FILENAME']); 
$base_url  = preg_replace("!^${doc_root}!", '', $base_dir); 
$protocol  = empty($_SERVER['HTTPS']) ? 'http' : 'https';
$port      = $_SERVER['SERVER_PORT'];
$disp_port = ($protocol == 'http' && $port == 80 || $protocol == 'https' && $port == 443) ? '' : ":$port";
$domain    = $_SERVER['SERVER_NAME'];
$domain_url  = "${protocol}://${domain}${disp_port}";
$full_url  = "${protocol}://${domain}${disp_port}${base_url}";

 
Ecco qua, tutto quello che serve a portata di mano!

Altri articoli che potrebbero interessarti