Problème d'URL

Eléphanteau du PHP | 49 Messages

12 déc. 2008, 17:39

Bonjour,

Voici clairement mon soucis, je n'ai pu trouver un titre convenant mieux :(
Je développe actuellement un site web permettant de réserver certaines ressources.
Lorsqu'une ressource est réservée par un utilisateur, j'envoie un mail pour en avertir l'administrateur avec le lien vers la fiche de la nouvelle réservation pour qu'il puisse la consulter afin de la valider ou de l'annuler.

Ce qui pose soucis est le lien.
En effet, ma fiche se trouve ici : /fiche/reservation.php et je lui indique un id, genre /fiche/reservation.php?id=1.
Seulement je ne sais pas pour le moment ou sera hébergé mon site web.
Donc en local, je met dans le mail "statiquement" http://127.0.0.1/fiche/reservation.php?id=1
Mais lorsqu'il serait hébergé ce sera peut-être www.monsite.fr/fiche/reservation.php?id=1 ou encore www.monsite.fr/appli/fiche/reservation.php?id=1.

Ce que je veux, c'est récupérer selon où il sera hébergé, que www.monsite.fr ou encore www.monsite.fr/appli

Est ce possible et comment ?

Ou y a t-il une solution par traitement de chaine.
Genre je récupère avec HTTP Referer l'url à laquelle je retire mon /fiche/reservation.php pour ne récupérer que le fameurx www.monsite.fr ou encore www.monsite.fr/appli


Merci de votre aide.

ViPHP
ViPHP | 3607 Messages

12 déc. 2008, 18:58

Alors tu as deux solutions, regarde du côté des variables SERVER
print_r($_SERVER);
Tu trouveras bien ton bonheur ;)
Ou alors mettre l'adresse du site dans un fichier de config...
A toi de voir ;)

Eléphanteau du PHP | 49 Messages

15 déc. 2008, 10:29

Ta fonction m'affiche un truc monstrueux :O

Je crois que je vais inclure ça dans ma base mysql :/

ViPHP
ViPHP | 3607 Messages

15 déc. 2008, 11:17

Hum hum, ma fonction était là poute montrer une piste pas pour te donner la solution...
Donc ma fonction te montrait toutes les entrées existante dans la super globale SERVER, et je suis persuadé que par exemple $_SERVER["SERVER_NAME"] ainsi que $_SERVER["REQUEST_URI"]
pourrait t'être grandement utile!

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphanteau du PHP | 49 Messages

15 déc. 2008, 17:06

Effectivement oui.

Seulement voici le problème maintenant, qui relève du "traitement" des chaines de caractères.
En effet, il y a des chances que mon appli soit hébergé comme ceci :
http://nomdedomaine/dossier/

Par conséquent, si je fais

Code : Tout sélectionner

$string1 = 'http://'.$_SERVER["SERVER_NAME"].'';
je vais obtenir http://nomdedomaine.
Puis

Code : Tout sélectionner

$string2 = ''.$_SERVER["REQUEST_URI"].'';
depuis ma page d'insertion dans ma base, string2 va me donner /dossier/include/admin/insert.php
Or je veux obtenir l'url de la page correspondant à la réservation qui vient d'être insérée dans ma base. Cette page est située ici /dossier/fiche/reservation.php?id=1


Pour pouvoir fournir dans le mail à l'administrateur le lien correcte de la page de la nouvelle réservation il faut donc :
$lien = 'http://'.$_SERVER["SERVER_NAME"].' + /dossier/fiche/reservation.php?id=1'

Or, le "/dossier" n'est pas connu il doit être déterminé dynamiquement si l'appli change de dossier.
La méthode serait alors de faire la "différence" entre ce que je connais et la variable $_SERVER["REQUEST_URI"].
C'est à dire :
$_SERVER["REQUEST_URI"] = /dossier/include/admin/insert.php
et
"/include/admin/insert.php"
afin que j'obtienne le nom du dossier et que je puisse enfin constituer mon url.

Comment est ce possible ??


Merci de votre aide précieuse, je sais pertinemment que ce n'est pas simple à comprendre mes explications :O

ViPHP
ViPHP | 4674 Messages

15 déc. 2008, 18:02

Hey :),

En effet, c'est loin d'être simple à comprendre alors que — j'en suis certain — le problème est tout banal.

La meilleure façon de gérer les chemins pour un site (on le remarquera à l'usage) est à travers des chemins absolus, et non relatifs. Mettre le nom de domaine dans le chemin est même inutile (je passe quand on change de protocole).
Donc, tes chemins auraient la forme suivante : /prefixe/suite/du/chemin/et/fichier. Tu peux fixer le préfixe dans une constante, de cette façon :
define('PATH_PREFIXE', '/prefixe/');
 et écrire tous tes chemins de cette façon :
echo PATH_PREFIXE . 'suite/du/chemin/et/fichier';
Note que le préfixe le plus court possible serait la racine, à savoir / (slash).
Note également l'existence de la constante DIRECTORY_SEPERATOR qui vaut / (slash) ou \ (backslash) si jamais on est sur un système type Unix ou Windows. À prendre en compte donc.

Est-ce que ça répond à ton besoin ? Est-ce que ça t'aide ? Si tu as du mal à résoudre un problème, partitionne le en plusieurs parties et tente de les résoudre une par une :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 49 Messages

15 déc. 2008, 18:11

Donc après une ou deux heures voilà à quoi je suis arrivé.
TOUT MARCHE :D

Code : Tout sélectionner

$string2 = $_SERVER["REQUEST_URI"]; $string1 = "/include/admin/insert.php"; $i = strlen($string1); $j = strlen($string2); $ind = $j - $i; $dossier = substr($string2,0,$ind); $lien = 'http://' . $_SERVER["SERVER_NAME"] . $dossier . '/fiche/reservation.php?id='.$id_resa.'';
J'ai fait différents tests à savoir dans le cas d'un hébergement avec www.monsite.fr ou www.monsite.fr/dossier/ et ça marche bien.

En revanche, je note ta solution qui très bien aussi et surtout beaucoup plus simple.

Je te remercie :)