JeuWeb - Crée ton jeu par navigateur
[regle] require avec arborescence absolue - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [regle] require avec arborescence absolue (/showthread.php?tid=972)

Pages : 1 2


[regle] require avec arborescence absolue - gtsoul - 25-03-2007

Bonjour,

je travaille sur un projet un peu bizarre. En gros, c'est la folie au niveau de la localisation des sources.
Prenons / comme racine du dossier des sources (situé dans /var/www/nomprojet en fait)
dans /www sont les fichiers php "entiers" et interprétables
dans /include/common quelques classes à inclure
dans et dans /www/include/global d'autres fichiers à inclure

Les fichiers php incluent en d'autres, qui à leur tour en incluent d'autres.
Ex : /www/index.php va inclure /include/common/classe.class.php qui va à son tour inclure /include/common.
Le hic c'est que le chemin des inclusions est toujours marqué de manière absolue (depuis la racine du site). Ca foire forcement.
J'ai envie de corriger tout cela avec le minimum de modifications donc éviter de réécrire les chemins relatifs car on s'y perd très vite.

Donc comment utiliser require avec une url absolue depuis une racine paramétrable ?


RE: require avec arborescence absolue - orditeck - 25-03-2007

Je sais pas du tout si j'ai bien compris ton message mais je m'essais quand même, ça vaut mieux que rien.

Je souhaite seulement répété que :
Si par exemple est dans /var/www/gtsoul/
./ = /var/www/gtsoul/
/ = / (donc la base carrément du serveur)

Donc tu fais un include comme suis :


include('/var/www/start.inc.php');
include('/var/www/include/global/function.php');
include('/var/www/include/common/classe.class.php');

Je verrais pas pourquoi cette méthode ne fonctionnerait pas : elle se situe toujours via la racine du serveur lui même, et non du dossier actuel.
Enfin, dit moi le si ce que je dis est pas clair ou que j'ai mal interprété ton problème.

Edit :
Sinon, tu as le ../
Si tu ne peux vraiment pas accéder à la racine du serveur en tant que tel, donc que la racine ( / ) = /www/
Donc, si / = /www (qui en réalité est /var/www/)
Si tu as un fichier PHP dans www/ et tu veux qu'il accèse de /var par exemple, tu fais :
../ = /var/
Dans le sens où :
include('../index.php'); = /var/index.php


RE: require avec arborescence absolue - gtsoul - 25-03-2007

Le truc c'est que toutes les url sont absolues, / (racine du site) signifie /var/www/nomprojet (depuis la racine du disque)
cad que /include/class.class est en réalité dans /var/www/nomprojet/include/class.class
Mais dans aucune url tu ne trouveras le préfixe /var/www/nomprojet, car c'est quelque chose qui dépend de son installation
Le chemin relatif est à éviter car les fichiers sont rangés à l'humeur du concepteur (on cherche un fichier dans un rep A qui va inclure le rep B qui contient à nouveau un fichier de A).

Pour le moment, je ne vois qu'une chose, c'est de paramétrer la racine et de lui donner la valeur d'une constante. ex : PATH_PROJET/include/fichier.php


RE: require avec arborescence absolue - orditeck - 26-03-2007

$root = "/var/www/";

include($root.'start.inc.php');
include($root.'include/global/function.php');
include($root.'include/common/classe.class.php');

Pour ma part c'est comme ça que je fonctionne et ça marche #1.
Je crois que c'est la meilleure méthode.


RE: require avec arborescence absolue - Plume - 26-03-2007

Y a moyen de récupérer le chemin depuis la racine & de le stocké donc dans cette dite varaible $root Smile


RE: require avec arborescence absolue - Dradge - 26-03-2007

Perso, toutes mes pages qui doivent en inclure une autre son appelée depuis la racine de mon site Web. Donc pas besoins de faire des include ou des require avec des chemins absolu Smile


RE: require avec arborescence absolue - kEkRkIkC - 26-03-2007

Tu peux obtenir le path de tes fichiers grace à la variable d'environnement DOCUMENT_ROOT :

$pathsite = getenv('DOCUMENT_ROOT');
ou
$pathsite = $_SERVER["DOCUMENT_ROOT"];

Après il ne te reste plus qu'a faire tes includes :

include($pathsite."/forums/index.php");
include($pathsite."/index.php");

Ect


RE: require avec arborescence absolue - gtsoul - 26-03-2007

Dans le cadre du travail d'un packageur, l'idéal serait de ne pas toucher au code.
J'ai essayé de créer un virtual host sous apache, mais ca n'a pas marché.


RE: require avec arborescence absolue - denisc - 27-03-2007

kEkRkIkC a écrit :Tu peux obtenir le path de tes fichiers grace à la variable d'environnement DOCUMENT_ROOT :

$pathsite = getenv('DOCUMENT_ROOT');
ou
$pathsite = $_SERVER["DOCUMENT_ROOT"];

Après il ne te reste plus qu'a faire tes includes :

include($pathsite."/forums/index.php");
include($pathsite."/index.php");

Ect
C'est à mon avis la meilleure méthode... ou presque.
J'utilise un système de fichier de configuration d'environnement:
Code PHP :
<?php
/* Fichier: env.class.php */

Class Env{
private
$app='/monsite';
private
$inc='/include';
private
$test='/test';
private
$template='/template';
private
$bd='/mysql';


public static function
getRoot(){
return
$_SERVER["DOCUMENT_ROOT"].'/';
}
public static function
getInclude(){
return
$this->getRoot().$this->inc.'/';
}
public static function
getTest(){
return
$this->getRoot().$this->test.'/';
}
public static function
getTemplate(){
return
$this->getRoot().$this->template.'/';
}
public static function
getBD(){
return
$this->getRoot().$this->bd.'/';
}
public static function
getApp(){
return
$this->getRoot().$this->app.'/';
}
}

?>
a utiliser comme suit :
Code PHP :
<?php 
require_once('env.class.php'); //Ne pas oublier le chemin relatif pour l'inclusion
require_once(Env::getInclude.'maclasseMetier.php');
require_once(
Env::getBD.'maclasseMySQL.php');
require_once(
Env::getTemplate.'monTemplate.php');



RE: require avec arborescence absolue - Plume - 27-03-2007

J'pensais à comme Eric, mais j'ai eu la main fainéante Smile
Citation :$pathsite = getenv('DOCUMENT_ROOT');
Par contre, je crois que ça, c'est à oublier, mais je suis pas trop sûr. ..