Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 09/01/2012, 14h35   #1
Invité de passage
 
Inscription : octobre 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 23
Points : 2
Points : 2
Par défaut Chemin absolu fonctionnant sur n'importe quel hébergeur

Bonjour à tous et meilleurs voeux,

Je réalise une application en-ligne pouvant être installé sur n'importe quel hébergeur or le chemin de la racine du site diffère selon les hébergeurs.

Je m'explique :
J'ai un hébergeur où la racine est simplement "/" et un autre où c'est "/home/mondomaine/public_html/forum"

Donc si je met un
Code :
1
2
3
4
5
include($_SERVER["DOCUMENT_ROOT"]."/common/menu.php");
Sur l'un ça donnera :
include(//common/menu.php);
et sur l'autre
include(/mondomaine/public_html/forum/common/menu.php);
Pour le second pas de soucis, mais pour le premier cela va peut être poser problème vu qu'il y a "//" au lieu de "/".
Apparemment "//" fonctionne sur l'hébergeur où j'ai testé, mais est ce que ce sera le cas sur un autre hébergeur où la racine est "/" ?

Ou avez-vous une autre solution plus efficace pour bien gérer les chemins absolus ?

En vous remerciant par avance.
xtremdisc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 15h09   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Il existe des fonctions pour répondre à cette problématique; dirname et realpath.

E.G.
Code :
1
2
$current_dir = dirname(__FILE__);
$parent_dir = dirname(dirname(__FILE__));
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 17h14   #3
Invité de passage
 
Inscription : octobre 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 23
Points : 2
Points : 2
Merci pour ta réponse.

Mais j'avais déjà essayé avec ces fonctions, je ne les utilise peut être pas bien ... ?

Pour être plus clair voici un exemple :
J'ai un fichier connect.php dans le répertoire common/
dans ce fichier connect.php j'ai un "include" d'un fichier présent à la racine.
Le fichier connect.php peut être "include" dans un fichier présent à la racine ou dans un fichier situé dans un répertoire voir sous-répertoire ...
xtremdisc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 17h20   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Je n'aime pas bien l'idée de composer une page web à grand coups d'includes, c'est un coup à se casser la tête pour rien.

Ce que tu peux faire en revanche c'est manipuler l'include path pour inclure un fichier depuis n'importe quel script, peu importe sa position dans la hiérarchie.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 21h29   #5
Membre Expert
 
Inscription : septembre 2010
Messages : 1 245
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 245
Points : 1 569
Points : 1 569
Si tu veux garder ton $_SERVER["DOCUMENT_ROOT"] tu peux simplement tester si le dernier caractère retourné par cette variable est un '/'

Code :
1
2
$adresse_racine = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;
include($adresse_racine."common/menu.php");
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2012, 10h44   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Citation:
Envoyé par ABCIWEB Voir le message
Si tu veux garder ton $_SERVER["DOCUMENT_ROOT"] tu peux simplement tester si le dernier caractère retourné par cette variable est un '/'

Code :
1
2
$adresse_racine = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;
include($adresse_racine."common/menu.php");
Ou plus simplement utiliser realpath qui enlèvera toujours le dernier / (ou encore utiliser trim)

Concrêtement:
Code :
1
2
3
4
if (!defined('DOCUMENT_ROOT'))
  define('DOCUMENT_ROOT', realpath($_SERVER['DOCUMENT_ROOT']));
 
include DOCUMENT_ROOT . '/libraries/core/test.class.php';
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2012, 18h29   #7
Invité de passage
 
Inscription : octobre 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 23
Points : 2
Points : 2
Merci à vous 2.

Je vais opter pour ta dernière solution Benjamin.

Bonne continuation.
xtremdisc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 15h07   #8
Invité de passage
 
Inscription : octobre 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 23
Points : 2
Points : 2
Désolé j'ai été un peu vite en mettant résolu pour ce sujet, je n'avais pas encore testé.
Voici juste une précision.

Je viens de tester la dernière solution et en fait realpath() n'enlève pas le / lorsque $_SERVER['DOCUMENT_ROOT'] est égale à / tout seul.
J'ai donc utilisé la fonction rtrim, et là ça fonctionne nickel.

Merci pour cette piste Benjamin.
xtremdisc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h11.


 
 
 
 
Partenaires

Hébergement Web