Essais sur les variables d'environnement

Les valeurs mises dans des variables sont vidées quand on veut les utiliser à l'intérieur d'un fichier inclus par les fonctions include() ou require_once() quand le chemin de ce fichier a été spécifié par son chemin absolu.

$_SERVER['PHP_SELF'] : /PHP-mySQL/matériel/exemples/var_env.php

__FILE__ : /home/bellynck/w-tiprof/PHP-mySQL/matériel/exemples/var_env.php

$_SERVER['SCRIPT_FILENAME'] : /home/bellynck/w-tiprof/PHP-mySQL/matériel/exemples/var_env.php

$_SERVER['DOCUMENT_ROOT'] : /home/bellynck/w-tiprof

$_SERVER['PATH'] :

$_SERVER['PATH_TRANSLATED'] :

$_SERVER['SERVER_NAME'] : tiprof.fr

$_SERVER['SCRIPT_NAME'] : /PHP-mySQL/matériel/exemples/var_env.php

$_SERVER['REQUEST_URI'] : /PHP-mySQL/mat%C3%A9riel/exemples/var_env.php

$_SERVER['PHP_AUTH_USER'] :

$_SERVER['HTTP_REFERER'] :

$_SERVER['HTTP_HOST'] : tiprof.fr

$_SERVER['REQUEST_METHOD'] : GET

$HTTP_SERVER_VARS['REMOTE_ADDR'] :

Calculs de chemins à partir des variables d'environnement

Cas où on a une variable $base qui contient :
sauv_chem=/home/bellynck/w-tiprof/PHP-mySQL/matériel/exemples
base=/home/bellynck/w-tiprof/PHP-mySQL
test=/home/bellynck/w-tiprof/PHP-mySQL/matériel/exemples

gethostbyaddr($base) =
gethostbyaddr("http://127.0.0.1/~bellynck/essais/test-variables/var_env.php") =
gethostbyaddr("http://127.0.0.1/") =
->ça n'a pas l'air de fonctionner terriblement...

calculs préliminaires :
$_SERVER['SCRIPT_FILENAME'] : /home/bellynck/w-tiprof/PHP-mySQL/matériel/exemples/var_env.php
strcmp($_SERVER['SCRIPT_FILENAME'], $base) : 31
substr($_SERVER['SCRIPT_FILENAME'], strcmp($_SERVER['SCRIPT_FILENAME'], $base)) : QL/matériel/exemples/var_env.php
substr($_SERVER['SCRIPT_FILENAME'], strcmp($_SERVER['SCRIPT_FILENAME'], $base), strlen($_SERVER['SCRIPT_FILENAME'])) : QL/matériel/exemples/var_env.php

strcmp($base, $_SERVER['SCRIPT_FILENAME']) : -31
substr($_SERVER['SCRIPT_FILENAME'], strcmp($base, $_SERVER['SCRIPT_FILENAME'])) : /matériel/exemples/var_env.php
substr($_SERVER['SCRIPT_FILENAME'], strcmp($base, $_SERVER['SCRIPT_FILENAME']), strlen($_SERVER['SCRIPT_FILENAME'])) : /matériel/exemples/var_env.php

complément entre la base et le fichier du script courant :
substr($_SERVER['SCRIPT_FILENAME'], strcmp($base, $_SERVER['SCRIPT_FILENAME'])) : /matériel/exemples/var_env.php

Pb : c'est le fichier du script courant, donc si c'est un fichier inclus, ça doit être le chemin de ce fichier, et non de l'URL courant (à tester... comparer avec l'utilisation de $_SERVER['PATH_TRANSLATED'] au lieu de $_SERVER['SCRIPT_FILENAME']) :

Conclusion : en fait, il faut utiliser __FILE__, donc si c'est un fichier inclus, ça doit être le chemin de ce fichier, et non de l'URL courant (à tester... comparer avec l'utilisation de __FILE__ au lieu de $_SERVER['SCRIPT_FILENAME']) :
substr(__FILE__, strcmp($base, __FILE__)) : /matériel/exemples/var_env.php

remonter dans lahiérarchie et redescendre :
$complement = substr(__FILE__, strcmp($base, __FILE__)); /matériel/exemples/var_env.php
$remonte = preg_replace("/((\w\-?\_?\.?)+\/)/e", "'../'", $complement); /maté../../var_env.php
$chemin=preg_replace("/((\w\-?\_?\.?)+$)/i", "", $remonte); /maté../../
$relatif = substr($chemin, 0, strlen($chemin)-1).$complement; /maté../../matériel/exemples/var_env.php

Autres tests

retour sur les essais sur le passage des variables dans les fichiers ‘include’ : index.php

voir aussi les essais d'expressions régulières : exp_reg.php