Aller au contenu

Failed opening sur une base existante


Sujets conseillés

Posté

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

Posté (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é par Occi
Posté

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

Posté

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

Posté

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:

<?php
include ("reserve/test2.php");
?>

et ça fonctionne.

Cette fonction test2.php appelle la fonction test3.php installée deux répertoires au dessus :

<?php
include ("../../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 2

Warning: 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 2

Warning: 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

Posté

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

Posté (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é par francoisch
Posté (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é par francoisch
Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...