Page 1 sur 1

navigation dans les répertoires

Posté : 18 juin 2010, 01:32
par michel2
Bonjour,

Je m'occupe d'une (petite) compagnie de théâtre. Je dis ça pour me présenter un peu, mais ça n'a pas vraiment d'importance dans le cas présent !

Je suis en train de modifier le site (petit lui aussi) que nous avons chez free.

J'ai donc installé apache, mysql, php chez moi, je suis sous ubuntu, pour préparer tout ça.

Le problème que j'ai est sans doute une bêtise, car je pense que sinon j'aurai trouvé des fils de discussions qui en parlent. Voilà :

J'ai une arborescence : Un répertoire "mondossier" dans lequel se trouve un fichier "monfichier" (fichier binaire)

Dans ce même "mondossier", j'ai un autre répertoire "appel", qui contient un fichier php "verif.php".

J'ai un troisième répertoire à la racine se nommant "autredossier", contenant un fichier php appelé "index.php"

A la racine, j'ai également un fichier php appelé "index.php" que l'on appelera "arrivee.php" pour ne pas les mélanger.


Mon fichier "mondossier/appel/verif.php" est un fichier qui est inséré dans les autres par des require_once. Dans celui-ci, je fais des tests, et j'ouvre le fichier "mondossier/monfichier" pour le lire, après avoir vérifié son existence.

CAS 1. Si j'ai dans "mondossier/appel/verif.php" : if(file_exists("mondossier/monfichier") et que je l'inclus dans mon fichier php à la racine "arrivee.php", le fichier est trouvé (c'est logique).

Si je je l'inclus dans mon fichier php "autredossier/index.php", le fichier n'est pas trouvé. Mais cela me semble logique, car j'imagine, que vu que le script en cours est dans "autredossier/"; le test "file_exists" cherche en fin de compte à partir de ce dossier, c'est à dire qu'il cherche l'existence d'un fichier : "autredossier/mondossier/monfichier" ce qu'il ne peut trouver, forcément.

J'ai bon jusque là ?

Bon, petit malin je me dis, que lors du test, il faut que je donne l'adresse complète du fichier pour être sûr de le trouver, quelque soit le dossier en cours.

Donc :

CAS 2. Dans mon "mondossier/appel/verif.php", je change : En début, je met : $repertoire = getenv("SERVER_NAME")."/".
Puis je change le test en if(file_exists($repertoire."mondossier/monfichier")

Mais là, ça ne fonctionne plus lors de l'inclusion dans "arrivee.php".

Donc :

CAS 3. Dans mon "mondossier/appel/verif.php", je change : En début je met : $repertoire="http://".getenv("SERVER_NAME")."/".
Puis je laisse le test en if(file_exists($repertoire."mondossier/monfichier").

Ca ne fonctionne toujours pas !

Le pire, c'est que si je fait afficher echo($repertoire."mondossier/monfichier"), l'adresse affichée est bien : http://localhost/mondossier/monfichier, soit l'adresse exacte de mon fichier !
Le plus fort, c'est que si je tape dans la barre du navigateur cette adresse, le contenu de mon fichier s'affiche !

Pourquoi cela fonctionne_t'il manuellement et pas par script ?

J'ai essayé de changer en mettant en dur "127.0.0.1" au lieu de "localhost", c'est le même résultat !

Quelqu'un peut-il m'expliquer ? (parce que franchement ça m'énerve de pas comprendre le truc).

Accessoirement, quelqu'un peut-il m'indiquer la solution ? (en même temps, si je comprends pourquoi ça ne fonctionne pas, je pourrais peut-être résoudre le problème).

J'espère que vous avez compris mon problème, c'est pas toujours facile à expliquer; moi, je vais prendre une aspirine.

Merci d'avance.

Michel

PS : Les noms ont été changés. Toute ressemblance avec des noms de fichiers et de dossier existants ou ayant existé ne serait qu'un pure hasard.

Re: navigation dans les répertoires

Posté : 18 juin 2010, 08:40
par Aureusms
Hmmm tu écris
 if(file_exists($repertoire."mondossier/monfichier") 
mais serai ce
if(file_exists($repertoire."mondossier/monfichier.php"); ?

Re: navigation dans les répertoires

Posté : 18 juin 2010, 09:09
par macgawel
Bonjour.

1. Idéalement, tu devrais toujours appeler les scripts à partir du même endroit... Ce qui résoudrait ton problème :wink:

2. Sinon, une solution simple :
Définir le répertoire "racine", et partir de lui pour retrouver le script à inclure.
Voir $_SERVER['DOCUMENT_ROOT'] pour plus de détail...

Re: navigation dans les répertoires

Posté : 18 juin 2010, 11:16
par michel2
Hmmm tu écris
 if(file_exists($repertoire."mondossier/monfichier") 
mais serai ce
if(file_exists($repertoire."mondossier/monfichier.php"); ?
Euh, non, là c'est juste un oublie dans le message.

Re: navigation dans les répertoires

Posté : 18 juin 2010, 11:24
par michel2
Bonjour.

1. Idéalement, tu devrais toujours appeler les scripts à partir du même endroit... Ce qui résoudrait ton problème :wink:

2. Sinon, une solution simple :
Définir le répertoire "racine", et partir de lui pour retrouver le script à inclure.
Voir $_SERVER['DOCUMENT_ROOT'] pour plus de détail...
Ce qui veut dire tout mettre dans le même répertoire... j'aime bien ranger mes trucs.

et puis le problème, c'est que je ne comprends pas pourquoi ça ne fonctionne pas; c'est surtout ça.

Pour $_SERVER["DOCUMENT_ROOT"] tu parles d'utiliser chroot() ?
Sur mon bouquin (pas très bon), ils disent qu'ils faut pas l'utiliser, c'est pas bien...
Forcément ça donne envie...

Je vais voir ça.

Re: navigation dans les répertoires

Posté : 18 juin 2010, 11:48
par michel2
Bon, ça y est, apparemment c'est résolu.

Comme proposé par Macgawel que je remercie, je me suis penché sur $_SERVER["DOCUMENT_ROOT"]

Donc pour info :

Dans mon fichier inclus, je commence toujours par définir le répertoire racine :
$repertoire = getenv("DOCUMENT_ROOT")."/"
Puis je le rajoute au début de l'appel de mes fichiers :
if(file_exists($repertoire."monfichier").

Ceci étant dit, je pense même que cette modification est peut-être inutile vu ce qui va suivre (voir plus bas). Je vais essayer d'enlever cette définition de $repertoire et je vous tiens au courant.

Et donc dans mon fichier qui va inclure l'autre; avant de le faire je fais un :
$repertoire=getenv("DOCUMENT_ROOT")."/"
chdir($repertoire).

Peut-être cela est-il suffisant ?

Re: navigation dans les répertoires

Posté : 18 juin 2010, 11:59
par michel2
Bingo ! Il suffit bien de faire un chdir(getenv("DOCUMENT_ROOT")."/") dans mon fichier d'appel à l'inclusion.

Par contre, je ne sais toujours pas pourquoi mon machin précédent ne fonctionnait pas...


Merci pour tout.

Michel

Re: navigation dans les répertoires

Posté : 18 juin 2010, 12:05
par michel2
Euh, par contre, je fais comment pour marque le fil comme résolu ?

Je me rend compte que mes posts ne sont pas marqué sous mon pseudo enregistré.