Recuperer nom de domaine + repertoire via un php ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recuperer nom de domaine + repertoire via un php ?

par insomniak » 13 sept. 2006, 16:38

Lol, c'est pas bien grave, c'est un petit soucis on va dire ;)

Merci pour la soluce en tout cas !
Ca merite un beau resolu !

@ bientot

par naholyr » 13 sept. 2006, 16:32

Oui, sauf sous Windows qui va te coller des "\". Tu peux donc ajouter un str_replace(DIRECTORY_SEPARATOR, "/", $chaine) pour t'assurer d'avoir des "/" utilisables dans une url. Mais un serveur Windows, c'est tellement anecdotique, cela vaut-il vraiment la peine ?

par insomniak » 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
@++

par naholyr » 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)

par insomniak » 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

par Cyrano » 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

par insomniak » 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 ;)
++

par Cyrano » 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()

par insomniak » 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
++

par naholyr » 13 sept. 2006, 11:20

Edit : gouré de message

par Cyrano » 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__));
?>

par insomniak » 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

par insomniak » 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
@++

par insomniak » 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

Informations sur le chemin (path en anglais)

par christof » 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 .