OVH Cloud OVH Cloud

Simplification possible ?

8 réponses
Avatar
Dominique Ottello
Bonjour,

Je cherche à obtenir, par une expression PHP, une variable chaîne ($dir)
contenant "../" le nombre de fois nécessaires pour remonter à la racine
du site depuis n'importe quel niveau d'arborescence du fichier afférent.

J'utilise : (sur une seule ligne)

for ($i=2,$dir="";$i<substr_count($_SERVER['PHP_SELF'],'/');$i++,$dir .=
"../");

Cela fonctionne très bien, mais est-ce possible de faire plus court ?

Merci.
--
Il vaut mieux ignorer où l'on est, et savoir qu'on l'ignore, que de se
croire avec confiance où l'on n'est pas. Jacques Dominique Cassini.

8 réponses

Avatar
Woofy
Bonjour,

Je cherche à obtenir, par une expression PHP, une variable chaîne ($dir)
contenant "../" le nombre de fois nécessaires pour remonter à la racine
du site depuis n'importe quel niveau d'arborescence du fichier afférent.

J'utilise : (sur une seule ligne)

for ($i=2,$dir="";$i<substr_count($_SERVER['PHP_SELF'],'/');$i++,$dir . > "../");

Cela fonctionne très bien, mais est-ce possible de faire plus court ?

Merci.


Si le but est de remonter a la racine du site, commencer par / devrait
suffire. (exemple : /siteperso/galerie/images/image.jpg plutot que
../../../siteperso/galerie/image/image.jpg)

Avatar
Christophe Meresse

for ($i=2,$dir="";$i<substr_count($_SERVER['PHP_SELF'],'/');$i++,$dir .> "../");

Cela fonctionne très bien, mais est-ce possible de faire plus court ?


Utiliser http://www.php.net/manual/fr/function.str-repeat.php pour
éviter la boucle.

Christophe

Avatar
Laurent Seguin
Le Sun, 13 Nov 2005 16:46:57 +0000, Woofy :

Je cherche à obtenir, par une expression PHP, une variable chaîne ($dir)
contenant "../" le nombre de fois nécessaires pour remonter à la racine
du site depuis n'importe quel niveau d'arborescence du fichier afférent.


Si le but est de remonter a la racine du site, commencer par / devrait
suffire. (exemple : /siteperso/galerie/images/image.jpg plutot que
../../../siteperso/galerie/image/image.jpg)


Ou utiliser dirname(__FILE__)


Avatar
Dominique Ottello
"Christophe Meresse" écrivait :

Utiliser http://www.php.net/manual/fr/function.str-repeat.php pour
éviter la boucle.


Merci.
Voila le résultat (sur une seule ligne) :
$dossier="".str_repeat("../",substr_count(substr($_SERVER['SCRIPT_FILENAME'],strlen($_SERVER['DOCUMENT_ROOT'])),'/')-1);

Le début $dossier="" est nécessaire pour que la variable existe même si
le nombre de répétitions est nul et ainsi éviter les alarmes de Variable
non déclarée.
--
Il vaut mieux ignorer où l'on est, et savoir qu'on l'ignore, que de se
croire avec confiance où l'on n'est pas. Jacques Dominique Cassini.

Avatar
Olivier Miakinen

Utiliser http://www.php.net/manual/fr/function.str-repeat.php pour
éviter la boucle.


Voila le résultat (sur une seule ligne) :
$dossier="".str_repeat("../",substr_count(substr($_SERVER['SCRIPT_FILENAME'],strlen($_SERVER['DOCUMENT_ROOT'])),'/')-1);


;-)

Le début $dossier="" est nécessaire pour que la variable existe même si
le nombre de répétitions est nul et ainsi éviter les alarmes de Variable
non déclarée.


<cit.>
Si multiplier vaut 0, la fonction retourne la chaîne vide.
</cit.>

Je ne vois pas pourquoi « $dossier="".""; » serait nécessaire à la place
de « $dossier=""; ».

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)


Avatar
Dominique Ottello
Olivier Miakinen <om+ écrivait :

<cit.>
Si multiplier vaut 0, la fonction retourne la chaîne vide.
</cit.>


Au temps pour moi ! Je n'avais pas lu la documentation jusqu'au bout.

Avatar
Christophe Meresse

Olivier Miakinen <om+ écrivait :

<cit.>
Si multiplier vaut 0, la fonction retourne la chaîne vide.
</cit.>


Au temps pour moi ! Je n'avais pas lu la documentation jusqu'au bout.


OK, en tout cas je ne sais pas la raison qui te pousse à vouloir faire
tres court et le tout sur une ligne mais si il n'y en a pas, n'hésite
pas à faire plusieurs lignes et commenter un peu au besoin. Tout un
projet écrit comme cela ca risque de vite devenir difficile à
maintenir ou à comprendre pour quelqu'un d'autre que toi.

A+
Christophe


Avatar
Dominique Ottello
"Christophe Meresse" écrivait :

OK, en tout cas je ne sais pas la raison qui te pousse à vouloir faire
tres court et le tout sur une ligne mais si il n'y en a pas, n'hésite
pas à faire plusieurs lignes et commenter un peu au besoin. Tout un
projet écrit comme cela ca risque de vite devenir difficile à
maintenir ou à comprendre pour quelqu'un d'autre que toi.


Une seule ligne : pour la facilité de recherche/remplacement dans des
fichiers multiples.

Le projet n'est que pour moi. Néanmoins, je commente largement afin de
ne pas être complètement perdu dans six mois.
--
Il vaut mieux ignorer où l'on est, et savoir qu'on l'ignore, que de se
croire avec confiance où l'on n'est pas. Jacques Dominique Cassini.