Recuperer nom de domaine + repertoire via un php ?

Eléphanteau du PHP | 21 Messages

23 juil. 2006, 12:19

Salut à tous,

Je suis face à un ptit probleme...
J'ai besoin de retrouver une information en php mais selon les serveurs je n'arrive pas toujours à recuperer l'information en question.
Grosso modo, si mon site est hebergé sur le serveur www.serveur.com et est stocké dans le repertoire /repertoire/ j'aimerai pouvoir récupérer ces deux infos d'une maniere constante.
Je faisais cela via les variables $_SERVER mais en général si je change de serveur, je n'ai pas forcement les memes infos.. (genre le nom du serveur n'est pas dans la meme variable quoi...)

Connaissez vous la variable universelle afin de retrouver sur n'importe quelle config apache ce nom de serveur et le repertoire de stockage du site ?

Merci d'avance
@++

Eléphant du PHP | 413 Messages

07 août 2006, 17:33

Salut,
Normalement, tu peux utiliser $_SERVER['SERVER_NAME'] et $_SERVER["SCRIPT_NAME"] (ou dirname($_SERVER["SCRIPT_NAME"])).
Est-ce que tu utilises ces variables ?
Si oui, peux-tu nous dire quelles valeurs différentes elles donnent ?
--
Goeb

Petit nouveau ! | 5 Messages

09 août 2006, 14:31

Bonjour,

Tu peux essayer la fonction pathinfo :
array pathinfo ( string path , int options )

pathinfo retourne un tableau associatif, contenant les informations sur le chemin path . Les éléments suivants sont retournés : dirname , basename et extension .

Eléphanteau du PHP | 21 Messages

09 août 2006, 22:39

Salut à tous,

merci pour vos indications !
Je garde ça au chaud car pour le moment je ne peux pas tester... :(
En tout cas vivement que je vois ce que ca donne.

@ bientot

Eléphanteau du PHP | 21 Messages

06 sept. 2006, 12:06

Salut,

Je remet le couvert sur ce sujet car j'ai pu tester mon probleme et je vois enfin ou ça bloque. Je m'explique :

Ceci est un code d'exemple pour tester ce que donnent ces lignes.

Code : Tout sélectionner

<?php printf($_SERVER['SERVER_NAME']); echo '<br />'; printf($_SERVER["SCRIPT_NAME"]); echo '<br />'; printf($_SERVER["SCRIPT_NAME"]); echo '<br />'; print_r(pathinfo($_SERVER['SERVER_NAME'])); echo '<br />'; printf(dirname($_SERVER["SCRIPT_NAME"])); ?>
Via ce script j'arrive à retrouver mes billes c'est à dire : url du serveur et dossier ou se trouve le script appelant.
Mon probleme se situe sur comment retrouver le repertoire (et bien seulement le repertoire) du script appelant. Si j'appelle l'url http://127.0.0.1/laboweb/index.php je retrouve bien /laboweb via printf(dirname($_SERVER["SCRIPT_NAME"]));
Maintenant, si je teste via l'url http://127.0.0.1/laboweb tout court, là ça ne me sort pas le repertoire /laboweb

Donc forcement je suis bien embetté.
Auriez vous une idée pour cela svp ?
Merci d'avance
@++

Eléphanteau du PHP | 21 Messages

13 sept. 2006, 10:40

personne n'a d'idée pour mon soucis ? comment faites vous pour récupérer le chemin de votre fichier php ? en fait, pour vous expliquer là ou je veux en venir, c'est que je souhaite récuperer ces infos pour pouvoir créer un lien de façon dynamique vu que mon site peut se situer à des endroits differents (repertoires).
Donc imaginez, vous envoyez un mail avec un lien vers un article par exemple. Et que votre page d'article est dans http://www.mondomaine.com/repertoire/index.php?art=12

Bah il faut connaitre le repertoire "repertoire" pour créer le lien complet vers l'article. Car si une personne lambda change le repertoire pour le nommer directory, ce sera plutot http://www.mondomaine.com/directory/index.php?art=12

Donc voilà ou j'en suis... Merci d'avance

Mammouth du PHP | 19672 Messages

13 sept. 2006, 10:47

Si tu utilises PHP5, il y a des constantes magiques bien pratiques : sur cette base, tu peux récupérer un chemin en faisant :
<?php
$chemin = realpath(dirname(__FILE__));
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

13 sept. 2006, 11:20

Edit : gouré de message

Eléphanteau du PHP | 21 Messages

13 sept. 2006, 11:54

Salut,

Le problème avec ta ligne c'est qu'il me donne tout le chemin, y compris ce qu'il y a avant mon root web...

Par exemple : M:\Web\_web.zmwsc\laboweb
Alors que je veux seulement recuperer laboweb.

C'est ce foutu laboweb que je veux ! que j'appelle mon script avec index.php ou non (car il y a une difference si tu fais 127.0.0.1/laboweb/ ou si tu fais 127.0.0.1/laboweb/index.php).

Merci d'avance
++

Mammouth du PHP | 19672 Messages

13 sept. 2006, 12:11

Ben voyons, tu connais sûrement la fonction explode() j'imagine : il te reste ensuite à récupérer le dernier élément avec par exemple array_pop()
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 21 Messages

13 sept. 2006, 12:25

Oui je connais... mais imagines que tu sois dans le cas suivant :

http://www.mondomaine.com/mon1erdir/mon ... /index.php

Bah avec ton dernier element tu n'aura qu'un seul morceau...
Là c'est vraiment problématique ce truc, mais ce que je n'arrive pas a comprendre c'est que personne ne se serve de ça !
Tout le monde code l'url de son site en direct dans les php ou quoi ?

Merci quand meme ^^



edit : je crois avoir trouvé :

Code : Tout sélectionner

substr(realpath(dirname(__FILE__)),strlen($_SERVER["DOCUMENT_ROOT"]),strlen(realpath(dirname(__FILE__))));
Si vous constatez une quelconque objection sur ce code (un moment ou ca ne fonctionnera pas ou autre, dites moi ;)
++

Mammouth du PHP | 19672 Messages

13 sept. 2006, 12:33

Résumons si tu veux bien : avec ma formule, tu récupères un chemin complet jusqu'au nom du répertoire : tu veux obtenir juste le nom de ce répertoire : dirname() avec en paramètre le nom du ficher répond à ton problème non ? Tu as en outre des variables d'environnement te permettant d'avoir le point de départ à partir de la racine du site et non le chemin depuis la racine du disque dur : $_SERVER['DOCUMENT_ROOT'] par exemple. Si avec tout ça tu n'obtiens pas ce que tu cherche, c'est que la question est mal formulée à mon sens auquel cas mes réponse ne servent pas à grand chose :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 21 Messages

13 sept. 2006, 13:46

Bon je récapepete... :P

Je dois pouvoir trouver dynamiquement le chemin ou est placé le site (en gros la racine du site lui meme, pas celle de l'hebergement).

Par exemple :
http://www.mondomaine.com/repertoire1/index.php
doit me retourner :
repertoire1

Autre exemple :
http://www.mondomaine.com/repertoire1/r ... /index.php
doit me retourner :
repertoire1/repertoire2

Tout cela pour me permettre d'envoyer des emails avec un lien vers tel ou tel article. La raison qui me pousse à faire ça est que le site peut-etre placé dans un repertoire quelconque, ou dans une arborescence de repertoires. Donc forcement, si je hard code dans mes fichiers php, le jour ou je change l'emplacement du site je suis obligé de remettre à jour le code php.
La contrainte à prendre en compte, est que je dois récuperer ça à partir de l'index.php qui est soit appelé par le nom de fichier soit automatiquement (www.domaine.com/index.php ou www.domaine.com)

Donc voila, je pense que là c'est assez explicite. Si tu as d'autres idées concernant ce probleme je suis preneur ;)

@bientot

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

13 sept. 2006, 14:15

Je pense qu'il vaut mieux travailler avec REQUEST_URI, DOCUMENT_ROOT ne correspondant parfois pas du tout à ton url (comment vas-tu pouvoir convertir "par magie" /home/sites/.users/1394/web/rep1/index.php en http://www.monsite.com/rep1/index.php ? :gla: )

Partant donc de REQUEST_URI, il suffit de retirer la fin (le domaine n'apparaît pas). dirname() fonctionnera très bien pour ça : dirname(getenv('REQUEST_URI')) renverra pour http://www.monsite.com/rep1/rep2/fichier.php le résultat /rep1/rep2. Si tu veux coller exactement au résultat que tu souhaites tu n'as qu'à ôter le "/" initial substr(dirname(getenv('REQUEST_URI')),1)

L'autre méthode, c'est d'avoir un fichier de config, dans lequel tu entres l'url de la racine de ton site. C'est comme ça que font tous les CMS (à ma connaissance) par exemple.

Edit : mon commentaire avec DOCUMENT_ROOT était stupide, je n'avais pas refléchi __FILE__ et DOCUMENT_ROOT peuvent aussi bien servir que REQUEST_URI, mais gare aux includes ! La "formule" serait en tous cas substr(dirname(__FILE__), strlen(getenv('DOCUMENT_ROOT'))+1)

Eléphanteau du PHP | 21 Messages

13 sept. 2006, 16:09

naholir,

Ta premiere solution ne fonctionne pas :

Code : Tout sélectionner

dirname(getenv('REQUEST_URI'))
Si tu tapes l'adresse sans le index.php (et donc ouverture automatique du index.php s'il existe), ça ne passera pas, il te zappe le dernier repertoire.

La deuxieme quant à elle fonctionne très bien :

Code : Tout sélectionner

substr(dirname(__FILE__), strlen(getenv('DOCUMENT_ROOT'))+1)
Cela ressemble à ce que je disais 2 posts plus haut. Maintenant, est-ce totalement fiable entre les differents serveurs (et donc configurations) ?

Merci
@++