Précédent   Forum des professionnels en informatique > PHP > Outils
Outils Forum d'entraide sur les outils pour développeurs PHP : EDI, installation, administration... Avant de poster : FAQ outils, toutes les FAQ PHP et les comparatifs
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2006, 23h42   #1
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Par défaut [Configuration] question par rapport aux chemins

Salut a tous,

j'ai une petite question à vous poser. Car je suis en train de m'arrancher les cheveux pour trouver une solution correcte. J'ai donc besoin de vous .

Voilà, mon problème est par rapport aux chemins dans les sites. Il est conseillé d'utiliser des chemins relatifs pour une meilleurs portabilité (on peut les déplacer, il marcheront toujours correctement, alors qu'avec les chemins absolus il faut les redéfinir à chaque fois). En plus apparement il est plus lourd d'appeler un chemin absolu qu'un chemin relatif. (à cause du http).

Le problème est que le site que je fais est beaucoup modularisé. Ce qui fait que j'ai des includes un peu partout. Le poblème viens lorsque je dois inclure un même fichier à partir de location différente.

Par exemple prenons un fichier qui sera inclu:

Code :
1
2
3
4
 
<?php
     echo 'image/image.jpeg';
?>
Si je l'appel à partir d'une page situé dans le repertoir racine ca marchera parfaitement. Par contre, si je l'appel à partir d'une page située dans un sous repertoire ca ne marchera plus (normal).

Ma question est donc, est-ce que l'on peut se débrouiller pour avoir ses liens relatifs?

Pour le moment j'ai crée une variable globale $rootpath que je met devant tout les chemins, j'ai donc des chemins absolus.

Voilà, merci d'avance pour vos réponses!
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 00h38   #2
Membre confirmé
 
Homme Emmanuel Thierry
Ingénieur systèmes et réseaux
Inscription : décembre 2003
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Thierry
Âge : 24
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : décembre 2003
Messages : 216
Points : 219
Points : 219
Fait une variable rootpath du chemin de la racine relativement au script..
Genre : $rootpath = '../../';
Sékiltoyai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 01h34   #3
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Pour être sûr de ne pas redéfinir ta racine, je conseillerais même de la mettre dans une constante plutôt qu'une variable.

Il y sûrement d'autres moyens imaginables, mais cette technique est très simple et tu pourras remarquer qu'elle est beaucoup utilisée, dans les scripts de forums par exemple.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 10h45   #4
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Citation:
Envoyé par Sékiltoyai
Fait une variable rootpath du chemin de la racine relativement au script..
Genre : $rootpath = '../../';

En fait la j'ai définit ma variable rootpath dans un fichier de configuration que j'inclu dans toute les pages. L'avantage de cette méthode est que j'ai juste une ligne à changer pour redéfinir tout les chemins. Si je fait avec ta méthode il faut que redéfinisse $rootpath dans toute les pages, c'est pas très pratique :/.
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 11h38   #5
Membre du Club
 
Inscription : septembre 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 72
Points : 55
Points : 55
Bien sur que non, ton $rootpath tu le redéfini seulement dans les scripts qui sont dans des sous-dossiers de ton site...

Actuellement, je ne connais pas d'autres méthodes pour parer à ce probléme.
big_ben3333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 11h56   #6
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
dans mes développement, j'utilise un seul script qui se trouve à la racine du site donc je n'avais pas de problème de lien
http://www.developpez.net/forums/sho...160#post449160

Le problème est que la personne qui travaille avec moi a besoin d'autres fichiers dans des répertoires donc j'ai fini par utiliser le même système que toi. J'ai une valeur de configuration qui contient le chemin de l'application par rapport à la racine du serveur
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 12h56   #7
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Citation:
Envoyé par big_ben3333
Bien sur que non, ton $rootpath tu le redéfini seulement dans les scripts qui sont dans des sous-dossiers de ton site...

Actuellement, je ne connais pas d'autres méthodes pour parer à ce probléme.
J'ai que ma page d'index qui n'est pas dans un sous dossier, ca en reviens donc au même.

Je sais pas si ca marche en mettant ../../ dans les pages concerné. Car si les pages inclusent en inclusent d'autres je sais pas comment ca se passera.


Par exemple.

j'ai ma page d'index.

Code :
1
2
3
 
include('include/toto.php');
include('include/toto2.php');
ma page toto.php:

Code :
1
2
 
include('toto2.php');
Est ce que ca marchera comme ca?

Du point de vu de la page toto.php c'est bon car elle est dans le même repertoire. Mais si j'appel la page toto.php d'une autre page qui est dans un autre repertoire, est ce que ca marchera ou bien est ce que l'appel devra être différent à chaque fois?
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 13h37   #8
Membre régulier
 
Avatar de titoon
 
Inscription : janvier 2005
Messages : 71
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : janvier 2005
Messages : 71
Points : 84
Points : 84
Citation:
Envoyé par Death83
En plus apparement il est plus lourd d'appeler un chemin absolu qu'un chemin relatif. (à cause du http).
Attention à ne pas confondre :
- URL (http://www.truc.com/include/toto.php), appelées via le wrapper d'URL, qui effectivement et un peu lourd et pas trop consseillé, mais utile si tu as besoin du code HTML généré par un script PHP sur un autre serveur
- chemin du fichier sur le disque (/home/truc/include/toto.php ou c:\truc\include\toto.php) où il n'y a pas de différences significatives entre chemin relatif et absolu

Dans le 2ème cas (ce dont tu as à priori besoin), tu peux utiliser une constante comme jlm94 l'explique
Code :
1
2
3
4
5
6
 
// Code commun à tous les scripts :
define('ROOTPATH', '/home/truc/');
 
// Script lambda : quel que soit le chemin du fichier (dans un dossier de dossier de dossier), le chemin vers toto est bon
include ROOTPATH . 'include/toto.php';
titoon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 16h35   #9
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Oki je vais essayer ca ce soir, par contre j'ai comme l'impression qu'il risque d'avoir un problème avec les chemins pour les images.
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 19h00   #10
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Comme je le disait ca marche pas top. Enfin pour les includes ca marche mais avec les autres opérations ca ne marche plus.

par exemple dans une page que j'inclu à différent niveau hiérarchique j'ai :

Code :
1
2
3
 
 
$oFCKeditor->Config['SkinPath'] = $sBasePath .'editor/skins/standard/' ;
comment dois-je définir $sBasePath pour que ca marche quelque soit le repertoire d'appel?

Avec le chemin sur le disque ca ne marche pas.
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 19h16   #11
Membre habitué
 
Avatar de Cyberbob002
 
Inscription : mai 2003
Messages : 140
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 140
Points : 130
Points : 130
Pour les liens publiés online ce mécanisme ne fonctionne pas. Tu dois alors définir une autre constante de type :
Code :
$sBasePathOnline = 'http://ton.site.com/';
D'ailleurs il est plus logique de faire :
Code :
define ('BASE_PATH_ONLINE', 'http://ton.site.com/');
car cette valeur ne changera pas !
Cyberbob002 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 19h23   #12
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Citation:
Envoyé par Cyberbob002
Pour les liens publiés online ce mécanisme ne fonctionne pas. Tu dois alors définir une autre constante de type :
Code :
$sBasePathOnline = 'http://ton.site.com/';
D'ailleurs il est plus logique de faire :
Code :
define ('BASE_PATH_ONLINE', 'http://ton.site.com/');
car cette valeur ne changera pas !
Donc dans ces cas la on est obliger de passer par des requette http?
Il y a pas moyen de se bébrouiller avec des chemins plus ou moins relatif?
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 20h18   #13
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Bon j'ai mélangé les 2 alors.

J'ai mis ca dans mes headers:

Code :
1
2
3
4
5
 
$Repertoire_site='/repertoire/';
 
define ("ROOTPATH" , $_SERVER['DOCUMENT_ROOT']);
define ("ONLINE_ROOTPATH" , 'http://'.$_SERVER['SERVER_NAME'].$Repertoire_site);
avec ROOTPATH utilisé pour les includes et ONLINE_ROOTPATH pour le reste.

Cependant j'ai une dernière petite question.

Pour une image ca en reviens au même niveau performance de faire:

<img src="images/image.jpg" alt="#"/>

et

<img src="http://www.truc.com/images/image.jpg" alt="#"/>

?
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 20h49   #14
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
J'opterais pour le première solution : pas de résolution de nom dans les DNS si le nom n'est pas dans le fichier hosts.

Mais de toutes façons, je ne pense pas que ce soit visible ailleurs que dans un programme de bench.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 20h51   #15
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Citation:
Envoyé par jml94
J'opterais pour le première solution : pas de résolution de nom dans les DNS si le nom n'est pas dans le fichier hosts.

Mais de toutes façons, je ne pense pas que ce soit visible ailleurs que dans un programme de bench.
En même je pense pas que la résolution de nom se fasse a chaque fois quand on navigue sur un site. (enfin j'espère).
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 21h59   #16
Membre régulier
 
Avatar de titoon
 
Inscription : janvier 2005
Messages : 71
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : janvier 2005
Messages : 71
Points : 84
Points : 84
Effectivement, j'ai pas pensé au cas des images
Par contre, je ne pense pas qu'il y a une réellement une différence entre le chemin absolu et relatif (merci les cache DNS )
titoon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2006, 10h24   #17
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Je relance mon post car j'ai un problème du au variables globales que j'ai utilisé (ROOTPATH et ONLINE_ROOTPATH).

En effet, dans mon script j'utilise à plusieurs moment des if(file_exists(ROOTPATH...))

Le problème est que ( je crois) que l'on ne peut utiliser d'adresse d'image absolue.

Comment faire dans ce cas la? En sachant toujours que j'inclue ce fichier à plusieurs niveau hiérarchique différents dans mes repertoires.
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h51.


 
 
 
 
Partenaires

Hébergement Web