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.