Page 1 sur 1

Inclusion de fichiers

Posté : 12 août 2008, 17:59
par Tong
Hello,

J'essaye depuis un fichier situé dans /dossier/index.php d'inclure un fichier situé dans /include/config.php
Seulement, ce fichier config.php est prévu pour être appellé depuis la racine, et tout les chemins des fichiers qui sont appelé depuis config.php sont relatifs.

Si j'inclus config.php dans index.php en faisant
include('../include/config.php')
toutes les inclusions présentes dans config.php ne fonctionnent alors plus.

Il y a une solution à ce problème plus simple que de passer les URLs en absolu ? Autrement je ne voit pas comment intégrer mon wordpress dans oscommerce ...

Merci ;)

Posté : 12 août 2008, 18:36
par dogmongo
tu mets les ; à la fin ?

Posté : 12 août 2008, 19:05
par Tong
Non mais c'est pas une erreur que j'ai, c'est un fonctionnement normal de php. Dans le cas d'un include, le code est exécuté dans le fichier appelant et donc les chemins, si ils sont relatifs ne sont plus valides si le fichier appelant n'est pas au même niveau que ce qui a été prévu au départ (si je ne dis pas de connerie).

Ce que j'aimerais trouver, c'est un astuce pour malgré tout pouvoir appeler mon fichier depuis un autre dossier que celui qui a été prévu au départ.

Posté : 12 août 2008, 20:07
par dunbar
Salut,

Quelque piste :?:
une $variable de $_SESSION,
Ou tu crée un fichier config dans lequelle tu indique les chemins qu'il te suffit d'appeller de n'importe quelle page.

Posté : 12 août 2008, 20:21
par Tong
Non mais le fichier que je souhaite appeler c'est déjà un fichier qui sert à définir des paths.
LE truc chiant, c'est que ces paths sont relatifs, c'est ça qui fait tout merder, et qui rends impossible un appel via un include depuis un dossier qui n'est pas situé à la racine de mon site.

Bon j'ai comme l'impression que je l'ai dans l'os. La seule solution que je voit, c'est de passer tout les chemins en absolu (ce qui devrait être le cas, je ne sais pas ce qu'il avait en tête le mec qui s'est occupé de cette partie d'oscommerce).
Je sens que je vais scratcher mon oscommerce en faisant ça mais bon, faute de mieux.

Posté : 13 août 2008, 13:43
par Ryle
En fait, l'inclusion a pour effet d'exécuter le fichier comme s'il faisant partie du source du fichier parent... du coup les chemins relatifs y sont effectivement associés.

Sans devoir parser le fichier, ce que tu peux faire c'est simplement définir une variable dans le script parent contenant le chemin vers la racine à partir de laquelle ton fichier inclu peut s'exécuter, et ajouter ensuite cette variable dans tes chemins :

dossier/index.php
...
$racine = '../';
include('../include/config.php');
...
include/config.php
if (!isSet($racine)) // si la variable n'est pas sépcifiée on la déclare vide (pour compatibilité)
  $racine = '';
...
// au lieu de $chemin = "../dossier/fichier"; tu aurais alors :
$chemin = $racine . "../dossier/fichier";
Ainsi si $racine n'est pas définie, rien ne change, et si elle est spécifiée, alors php va se recaler par rapport à elle pour déterminer le chemin relatif :)

Posté : 14 août 2008, 22:58
par Tong
C'est au bit près ce que j'ai fini par faire ;)

Finalement, avec un coup de cherche include( puis remplace par include(ABSPATH.
Ca va assez vite.

Désolé de ne pas être repassé par là pour mettre le tag résolu :oops: