8800 sujets

Développement web côté serveur, CMS

Bonjour,
voila mon problème je cherche à trouver une solution à mon problème :

énoncé :
j'ai plusieurs modules dans un même site internet.
Chacun de ces modules, utilisent un fichier de configuration qui lui est propre.
Ces fichiers de configurations utilise un fichier de configuration "maître".
exemple de la ligne :



// chemin à la config maître depuis le thème
$sCheminCfgMaitre = '../../../../../conf/config_maitre.php';



Problème :
Lorsque je fais des appels ajax, le contexte change et le chemin relatif pour accéder au fichier config maître n'est plus le même exemple au lieu de :

$sCheminCfgMaitre = '../../../../../conf/config_maitre.php';

Il faudrait

$sCheminCfgMaitre = '../../../../../../../../conf/config_maitre.php';

Quel possibilité je peux avoir pour régler ce problème ?
Modifié par Su4p (09 Sep 2011 - 19:11)
Nan justement le but de cette technique et de pouvoir changer le site d’hébergeur sans toucher au fichier pour avoir exactement la même copie en test et en production.
Si tes serveurs sont bien configuré, tu peux utiliser le chemin absolu quand même, mais à l'aide de :
$_SERVER['DOCUMENT_ROOT']
Arf il va me falloir une autre solution car des fois le site se trouve sur : d:/test/sante/leSite et des fois le site se trouve sur home/leSite/ donc le document root ne me vas pas à moins que quelque chose m’échappe ?
Ce que j'utilise, personnellement, et qui marche bien.

Un fichier de constantes inclus automatiquement.
Fichier placé à la racine "virtuelle" du site.
Dans le fichier:
define('ROOT', realpath(__DIR__));


Du coup, peu importe si le serveur est mutualisé, bien configuré, ou que sais-je : je choisis la racine.
Modifié par Lpu8er (09 Sep 2011 - 11:54)
Su4p a écrit :
à moins que quelque chose m’échappe ?

Oui.
Quand tu es sur Windows, si ton alias est bien configuré, ton DOCUMENT_ROOT sera "d:/test/sante/leSite" et quand tu es sur Linux, ton DOCUMENT_ROOT sera "/home/leSite". Donc si tu fais :
require( $_SERVER['DOCUMENT_ROOT'] . '/tonfichier.inc.php' );

Ca incluera tonfichier.inc.php qui est à la racine du dossier "leSite" dans les deux cas.
Agylus : c'est soumis à conditions:
- les alias doivent être définis
- on doit encore utiliser realpath pour résoudre les liens symboliques
- indisponible en CLI

(par pitié, supprimez cette manie des .inc. Le pur procédural, c'est fini)
@Agylus :
le document root me renvoi cela

/home/osfp/sd/testosfp/www
D:\\www\\mcidev

dans un cas le fichier est là :
/home/osfp/sd/test/www/cong/config_maitre.php

Dans l'autre le fichier est là
D:\\www\\mcidev\\sante\\site\\conf\\config_maitre.php

Donc non le chemin n'est pas le même.
Lpu8er a écrit :
(par pitié, supprimez cette manie des .inc. Le pur procédural, c'est fini)

Le rapport avec la choucroute ?
@Lpu8er : Je ne suis pas sûr mais il me semble que cette méthode déplace le problème sur le fichier des constantes à inclure.
Su4p a écrit :
@Lpu8er : Je ne suis pas sûr mais il me semble que cette méthode déplace le problème sur le fichier des constantes à inclure.


Tant que l'inclusion est dans un fichier à la racine, non.
Et c'est un peu une bonne pratique, qu'on râbache depuis un moment : avoir un seul point d'entrée, et pas autant de points d'entrées que de pages.

Agylus : rien, une remarque au passage. Tu sais qu'en voyant ça, certains pensent qu'il FAUT placer un .inc aux fichiers devant être inclus ?
Les technologies utilisées ne me permettent pas d'avoir qu'un seul point d'entré, et je l'aurais fait si cela était possible.

Si tu as une autre idée ou quelqu'un d'autre je suis preneur !
@Lpu8er : Bonne remarque alors, parce que en ce qui me concerne, c'est plus une sorte de repère dans les fichiers, comme mes fichiers de classes qui sont nommés en .class.php (ex : trucbidule.class.php).

@Su4p : En reprenant le système du DOCUMENT_ROOT, tu devrais créer un VHOST qui pointe directement dans le bon dossier, au lieu de faire un Alias.
le VHOST c'est sympa à condition d'avoir la main sur le serveur... et ce n'est pas mon cas Smiley decu
Je cherche plus quelque chose en php, une sorte d'autoload mais j'ai peur que ce soit trop lourd
Si tes requêtes Ajax sont faites avec un framework comme jQuery ou Mootools, tu peux faire ça :


$ajax_path = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ? '../../../' : '';
$sCheminCfgMaitre = $ajax_path . '../../../../../conf/config_maitre.php';


Ça reste quand même de la bidouille, je pense que les chemins absolus sont beaucoup plus propre et moins casse gueule.

Personnellement je fais comme Lpu8er dans mon framework : un point d'entré, calcul du chemin automatiquement.

Ça me parait étrange qu'on ne puisse pas adapter le calcul de la racine à ton architecture.
Modifié par jb_gfx (09 Sep 2011 - 17:52)
c bon !!!! merci pour votre aide j'ai trouvé !!

<?php
/*
	Module Club des utilisateurs
	Configuration des accès aux bases de données
*/

// chemin à la config maître depuis le thème
$sCheminCfgMaitre = '../../../../../conf/config_maitre.php';

// chemin d'accès à ce fichier
$sBasePath = str_replace(DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, dirname(__FILE__)) . DIRECTORY_SEPARATOR;
$sBasePath = str_replace(DIRECTORY_SEPARATOR, "/", $sBasePath);

// chemin final
$sCheminCfgMaitre = $sBasePath . $sCheminCfgMaitre;


include_once($sCheminCfgMaitre)
// on utilise les paramètres de la configuration maître
$config['sHostWP']	= $tConfigMaitre['sHostWP'];
$config['sUserWP'] 	= $tConfigMaitre['sUserWP'];
$config['sBaseWP']	= $tConfigMaitre['sBaseWP'];
$config['sPwdWP']	= $tConfigMaitre['sPwdWP'];


?>