francoisch Posté 22 Avril 2008 Posté 22 Avril 2008 Bonjour La fonction messlecture.php, que je développe, appelle la fonction connexion.php, sans succcès : Warning: main() [function.main]: open_basedir restriction in effect. File(../../connexion.php) is not within the allowed path(s): (/mnt/167/sda/f/b/fctestmad) in /mnt/167/sda/f/b/fctestmad/martinot/reserve/messlecture.php on line 15 Warning: main(../../connexion.php) [function.main]: failed to open stream: Operation not permitted in /mnt/167/sda/f/b/fctestmad/martinot/reserve/messlecture.php on line 15 Fatal error: main() [function.require]: Failed opening required '../../connexion.php' (include_path='/mnt/167/sda/f/b/fctestmad/include:.:/usr/php4/lib/php') in /mnt/167/sda/f/b/fctestmad/martinot/reserve/messlecture.php on line 15 Mais: - la base existe - cette base, et la même table, sont appelées par dautres fonctions opérationnelles (installées dans le même répertoire que messlecture.php) en appellant de même la fonction connexion.php - ces appels fonctionnent parfaitement à la même minute où lappel ci-dessus plante Jai naturellement repris le code déjà utilisé par les autres fonctions : require_once ("../../connexion.php"); Naturellement, avec un include, ça plante pareil. Je sèche ; jaurais loupé un truc gros comme une maison ? Par avance merci de votre aide. Francois
Occi Posté 22 Avril 2008 Posté 22 Avril 2008 (modifié) Salut, tu as apparemment une erreur à la ligne 15 du fichier messlecture.php, il faudrait voir le code qui se trouve à cet endroit. EDIT : oups en relisant je me dis que ça doit être l'erreur provoquée par un problème de chemin que tu as en faisant ton include(), à tu vérifiais que le chemin de ton require_once ("../../connexion.php"); est correct ? Occi Modifié 22 Avril 2008 par Occi
francoisch Posté 22 Avril 2008 Auteur Posté 22 Avril 2008 Oui, à la ligne 15, il y a le Require_once (Include fait pareil, sauf l'erreur fatale). Oui, connexion.php est deux niveaux au dessus de messlecture.php. Deux autres fonctions, installées dans le même répertoire que messlecture.php appellent le même connexion.php. Oui, ça ressemble à une histoire de fou. Merci de m'aider à trouver mon erreur. Francois
Dan Posté 23 Avril 2008 Posté 23 Avril 2008 C'est tout simplement parce que l'Open Basedir est actif. Tu ne peux donc pas ouvrir (require ou include) des fichiers qui ne sont pas dans le Path : /mnt/167/sda/f/b/fctestmad Si ce fichier se trouve bien dans ce répertoire, essaie avec un require("connexion.php") , il devrait passer
francoisch Posté 23 Avril 2008 Auteur Posté 23 Avril 2008 Merci de ta réponse Dan. J'ai fait progresser mes tests mais j'en suis tjs au même point; j'ai simplifié à l'extrême mes fonctions. La function test1.php appelle la function test2.php installée dans le répertoire reserve en dessous: <?phpinclude ("reserve/test2.php");?> et ça fonctionne. Cette fonction test2.php appelle la fonction test3.php installée deux répertoires au dessus : <?phpinclude ("../../test3.php");?> et ça ne fonctionne pas : Warning: main() [function.main]: open_basedir restriction in effect. File(../../test3.php) is not within the allowed path(s): (/mnt/167/sda/f/b/fctestmad) in /mnt/167/sda/f/b/fctestmad/martinot/reserve/test2.php on line 2Warning: main(../../test3.php) [function.main]: failed to open stream: Operation not permitted in /mnt/167/sda/f/b/fctestmad/martinot/reserve/test2.php on line 2Warning: main() [function.include]: Failed opening '../../test3.php' for inclusion (include_path='/mnt/167/sda/f/b/fctestmad/include:.:/usr/php4/lib/php') in /mnt/167/sda/f/b/fctestmad/martinot/reserve/test2.php on line 2 Pourtant : - jai essayé avec require_once, require, include avec le même résultat - jai déjà des fonctions qui sappellent de manière identique et ça fonctionne toujours Je sèche ; merci par avance de votre aide. Francois
Dan Posté 23 Avril 2008 Posté 23 Avril 2008 Le message d'erreur: Warning: main() [function.main]: open_basedir restriction in effect. File(../../test3.php) is not within the allowed path(s): (/mnt/167/sda/f/b/fctestmad) in /mnt/167/sda/f/b/fctestmad/martinot/reserve/test2.php on line 2 te donne la raison. Comme je te le disais, la restriction open_basedir est active ! Il faut que tu mettes tes fichiers à inclure dans le répertoire /mnt/167/sda/f/b/fctestmad et n'utilises pas ../.. dans tes inclusions. La restriction spécifiée par open_basedir est en fait un préfixe et non un dossier. Cela signifie que "open_basedir = /dir/incl" donne accès au dossier "/dir/include" et aussi au dossier "/dir/incls" s'il existe. Lorsque vous souhaitez restreindre l'accès à un dossier spécifique, ajoutez un slash final. Par exemple : open_basedir = /dir/incl/. Essaie en mettant le chemin complet vers ton fichier, par exemple /mnt/167/sda/f/b/fctestmad/test3.php
francoisch Posté 23 Avril 2008 Auteur Posté 23 Avril 2008 (modifié) Dan, merci pour ta réponse. Le test, je l'ai fait et il fonctionne; néanmoins, je ne suis pas sûr que ce soit ni nécessaire, ni la solution simple. Plusieurs raisons à ça: - fctestmad est mon user de connexion, la racine (mon URL: http://fctestmad.free.fr) - tous mes fichiers sont, soit dans cette racine, soit dans des répertoires qui en dépendent directement Ils devraient donc être accessibles de l'un à l'autre, en descendant dans l'arborescence ou en remontant; OpenBaseDir ne devrait pas intervenir. D'ailleurs, dans mes tests, l'accès a été réussi une fois ou deux (un pb d'hébergeur?). Par exemple, la structure avec les 3 fichiers test: - racine: test3 ---- martinot: test1 ------- reserve: test2 J'ai donc une structure très simple qui ne devrait pas poser de problème. J'ai d'ailleurs d'autres fonctions qui s'appellent très bien avec la même structure que celle utilisée pour les fichiers test. Je suis sec mais je cherche. Merci de ton aide précieuse. Francois Modifié 23 Avril 2008 par francoisch
francoisch Posté 23 Avril 2008 Auteur Posté 23 Avril 2008 (modifié) Ce que je ne m'explique pas est pourquoi il coince dans test2.php et pas dans la fonction messaction.php: - installée dans le même répertoire que test2.php - appelle le même connexion.php (alias test3.php) avec le même require_once("../../connexion.php"); - et ça marche OpenBaseDir peut-il godiller parfois? Je cherche. Merci de ton aide. Francois ------------------------------------------------------- J'en viens à me dire qu'il y a peut-être un smolduc sur mes répertoires, un truc qui s'accroche sans qu'on le voit. Je me demande si la solution ne serait pas d'effacer tout et de recréer. Francois Modifié 23 Avril 2008 par francoisch
francoisch Posté 23 Avril 2008 Auteur Posté 23 Avril 2008 Solution trouvée: le fichier inclus "hérite" de la "hiérarchie" de niveau du fichier appelant. En clair, dans mon cas: - la fonction initiale est au niveau 2, et inclut le fichier suivant - la fonction du Require est au niveau 3 - la fonction connexion.php est au niveau 1 (racine) Le Require doit donc être fait sur un seul niveau (../). Francois
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant