Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
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 10/03/2007, 15h08   #1
Membre du Club
 
Avatar de Jarodd
 
Inscription : août 2005
Messages : 258
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 258
Points : 63
Points : 63
Par défaut [Répertoire] Gestion avec include

Bonjour,

Cela fait quelques jours que je suis bloqué sur un point plutôt facile... Mais ça veut pas.

Mon arborescence :

Code X :
1
2
3
4
5
6
7
8
index.php
fichier.php
[include]
___config1.php
___config2.php
[répertoire]
___sous-index.php
___sous-fichier.php


L'index.php de la racine appelle config1.php par un include, lui-même chargeant config2.php si besoin. Ensuite, le contenu change, selon le fichier du répertoire.

Problème : je suis en trainb de faire un sous-domaine, donc le fichier d'appel est un niveau plus bas :

Code X :
1
2
3
4
5
6
7
8
9
10
index.php
fichier.php
[include]
___config1.php
___config2.php
[répertoire]
___sous-index.php
___sous-fichier.php
[sous-domaine]
___index_SD.php

Quand je charge index_SD.php (en ajoutant un ../), config1.php est bien inclus, mais ensuite j'ai des erreurs pour config2.php, sans rien changer.

J'ai l'erreur Warning:
Citation:
main(./config.inc.php): failed to open stream: No such file or directory
Par contre si je met index_SD.php à la racine (sans le ../), cela fonctionne. Je préfère conserver les chemins relatifs, j'ai tout de même essayé en absolu, cela n'a rien résolu.

Voyez-vous d'où cela peut venir ? J'ai l'impression que partir d'un répertoire au lieu de la racine perturbe tout...

Merci d'avance

Jarodd
Jarodd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2007, 22h09   #2
Membre émérite
 
Inscription : juin 2002
Messages : 1 013
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 1 013
Points : 959
Points : 959
si tu nous montrais le code des include ce serait peut-être plus simple à analyser...
francis m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2007, 22h56   #3
Membre du Club
 
Avatar de Jarodd
 
Inscription : août 2005
Messages : 258
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 258
Points : 63
Points : 63
index.php :

Code :
1
2
3
4
<?php
include_once("./includes/config1.php");
include_once("./templates/default/accueil.php");
?>
index_SD.php :

Code :
1
2
3
4
<?php
include_once("./../includes/config1.php");
include_once("./../templates/default/accueil.php");
?>
includes/config1.php :

Code :
1
2
3
4
5
6
<?php
session_start();
 
// ici définition de quelques constantes
include_once("./config2.php");
?>
includes/config2.php :

Code :
1
2
3
4
5
6
7
8
 
$dbHost = "";
$dbName1 = "";
$dbName2 = "";
$dbUser = "";
$dbPassword = "";
$connexion_bdd = mysql_connect($dbHost, $dbUser, $dbPassword);
// + définition de variables
templates/default/accueil.php :

Code :
1
2
3
4
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
+ code HTML classique
Jarodd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2007, 22h56   #4
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
Normal car config2.php est appellé avec un chemin relatif "./" et cela devrait etre "../".

En fait les inclusions se basent sur le fichier appellé en entrée , c'est a dire index_SD et les chemins relatifs (meme les inclusions incluses , attention faut suivre) sont donc toujours '../' dans ce cas.

tu vas me répondre que ca ne te va pas car du coup quand tu vas appeller index.php, config2 ne va plus passer.
Deux solutions, soit utiliser des url absolues, soit passer en variable le début du chemin relatif (genre '.' ou '..' ou meme '../..' ) dans tes pages et la faire précéder tes chemins d'inclusions.
exemple
index.php:
$rel ='./'
include ($rel.'config1.php');
config1.php
include ($rel.'config2.php');
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 21h38   #5
Membre du Club
 
Avatar de Jarodd
 
Inscription : août 2005
Messages : 258
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 258
Points : 63
Points : 63
Bonsoir,

Je ne suis pas sûr d'avoir bien compris ce qu'il fallait faire, et à quoi cela allait servir

Il faut mettre cette variable au début de chaque fichier et remplacer include (./config1.php'); par include ($rel.'config1.php'); c'est ça ?
Jarodd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 08h25   #6
Membre éclairé
 
Avatar de TucSale
 
Inscription : novembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2005
Messages : 265
Points : 301
Points : 301
Envoyer un message via MSN à TucSale
bonjour,

Personnellement pour éviter de ne pas me soucier de l'arborescence de mon site, j'utilise le chemin absolue pour faire mes includes :


Code :
include_once($_SERVER['DOCUMENT_ROOT']."/templates/default/accueil.php");
$_SERVER['DOCUMENT_ROOT'] te retourne le chemin absolu de ta racine de ton site
TucSale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 09h32   #7
Membre régulier
 
Inscription : janvier 2007
Messages : 85
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 85
Points : 80
Points : 80
Pour completer l'explication de raideman,
le chemin absolu est le chemin complet du fichier.
le chemin relatif est le chemin du fichier à trouver par rapport à celui qui l'appelle.
Ton arborescence :
Code X :
1
2
3
4
5
6
7
8
9
10
 index.php
fichier.php
[include]
___config1.php
___config2.php
[répertoire]
___sous-index.php
___sous-fichier.php
[sous-domaine]
___index_SD.php
Premier cas :
le fichier config1 est inclus dans index.php lorsqu'il s'execute et qu'il demande un include du fichier config2 on se base à la position de index.php pour chercher config2.php

Second cas : (celui qui plante)
le fichier config1 est inclus dans index_SD.php, lorsqu'il s'execute et qu'il demande un include du fichier config2 on se base à la position de index_SD.php pour trouver config2.php

L'erreur provient du fait d'utiliser des chemins relatifs qui se basent sur la position du fichier qui appelle le include.

C'est pour cette raison qu'on te conseille d'utiliser des chemins absolus, ou de passer en paramètre le chemin du include.

Pour ma part, je créé un DEFINE contenant le chemin absolu pour chacun de mes dossiers 'sensibles'.

@++
__________________
"Soyez les changements que vous aimeriez voir dans le monde" Mahatma Gandhi
p.legal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 22h19   #8
Membre du Club
 
Avatar de Jarodd
 
Inscription : août 2005
Messages : 258
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 258
Points : 63
Points : 63
Ok, je commence à piger le fonctionnement, mais cela ne marche pas encore. Avant d'ajouter des variables ou des constantes, je vais essayer avec $_SERVER['DOCUMENT_ROOT'].

Alors mon fichier index qui fonctionne :
Code :
1
2
3
<?php
include_once("./includes/config1.php");
?>
Mon fichier index.php qui ne fonctionne pas :
Code :
1
2
3
<?php
include_once($_SERVER['DOCUMENT_ROOT'] . "/includes/config1.php");
?>
J'ai aussi joué sur l'ajout ou la suppression du point et su slash en début de guillemet, cela n'a rien changé.

L'erreur :
Citation:
Warning: main(e:/easyphp1-8/www/includes/config1.php): failed to open stream: No such file or directory in h:\site\index.php on line 3
Jarodd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 08h59   #9
Membre éclairé
 
Avatar de TucSale
 
Inscription : novembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2005
Messages : 265
Points : 301
Points : 301
Envoyer un message via MSN à TucSale
D'après tes messages le problème viens de ta config d'apache, car tu utilise un alias et $_SERVER['DOCUMENT_ROOT'] ne sera utile d'avec un serveur virtuel....
Bon bref
essais :
Code :
1
2
3
4
 
$localPath = 'h:/site/'; //initialisation du chemin absolu tu site
include_once($localPath . "/includes/config1.php");
include_once($localPath . "/includes/config2.php");
TucSale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 19h53   #10
Membre du Club
 
Avatar de Jarodd
 
Inscription : août 2005
Messages : 258
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 258
Points : 63
Points : 63
Non toujours les mêmes erreurs...

Code :
echo $localPath . 'index.php';
Cela affiche bien le chemin de ma page d'accueil.

Code :
include_once($localPath . "index.php");
Cela affiche toujours la même erreur :

Citation:
No such file or directory in H:\site\index.php on line 2
Je ne sais plus quoi essayer !
Jarodd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2007, 22h39   #11
Membre du Club
 
Avatar de Jarodd
 
Inscription : août 2005
Messages : 258
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 258
Points : 63
Points : 63
Bonsoir,

Personne n'a une idée ? Cela commence à devenir urgent et je reste bloqué sur cette erreur
Jarodd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 14h11   #12
Invité régulier
 
Inscription : mai 2006
Messages : 16
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 16
Points : 5
Points : 5
tu peux faire l'appel de tous tes fichiers en include_once dans index ou chacun appel un autre .. par contre faut pas oublier que même si tu es rendu au 4e fichier qui est appelé les uns en dessous des autres .. le lien sera toujours par rapport à qui l'appel


J'explique

index.php

inc/config1.php
inc/config2.php
inc/lvl2/config3.php

dans index tu vas trouver
include("inc/config1.php");

dans config1.php tu vas trouver
include("config2.php");

dans config2.php tu vas trouver
include("lvl2/config3.php");


J'espere avoir répondu à ton problème
c4l3m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2007, 23h15   #13
Futur Membre du Club
 
Inscription : juillet 2004
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2004
Messages : 13
Points : 16
Points : 16
Bonsoir,
Est-il possible d'essayer dans un répertoire de test sur le net?
Car, comme l'a dit TucSale, il s'agit apparemment d'un problème Apache.

Donc peut-être cela marchera-t-il "en prod" (sur le net), vu que ici, tu es en local...
Je te dis ça, car je viens de tester en local chez moi. Avec le $_SERVER['DOCUMENT_ROOT'], ça fonctionne !!
dargoan 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 04h53.


 
 
 
 
Partenaires

Hébergement Web