Page 1 sur 2
Recuperer nom de domaine + repertoire via un php ?
Posté : 23 juil. 2006, 12:19
par insomniak
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
@++
Posté : 07 août 2006, 17:33
par goeb
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 ?
Informations sur le chemin (path en anglais)
Posté : 09 août 2006, 14:31
par christof
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 .
Posté : 09 août 2006, 22:39
par insomniak
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
Posté : 06 sept. 2006, 12:06
par insomniak
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
@++
Posté : 13 sept. 2006, 10:40
par insomniak
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
Posté : 13 sept. 2006, 10:47
par Cyrano
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__));
?>
Posté : 13 sept. 2006, 11:20
par naholyr
Edit : gouré de message
Posté : 13 sept. 2006, 11:54
par insomniak
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
++
Posté : 13 sept. 2006, 12:11
par Cyrano
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()
Posté : 13 sept. 2006, 12:25
par insomniak
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

++
Posté : 13 sept. 2006, 12:33
par Cyrano
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

Posté : 13 sept. 2006, 13:46
par insomniak
Bon je récapepete...
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
Posté : 13 sept. 2006, 14:15
par naholyr
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 ?

)
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)
Posté : 13 sept. 2006, 16:09
par insomniak
naholir,
Ta premiere solution ne fonctionne pas :
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 :
Cela ressemble à ce que je disais 2 posts plus haut. Maintenant, est-ce totalement fiable entre les differents serveurs (et donc configurations) ?
Merci
@++