Incident OpenbaseDir

Incident OpenbaseDir - PHP - Programmation

Marsh Posté le 23-04-2008 à 13:32:07    

Bonjour
 
La fonction messlecture.php, que je développe, appelle la fonction connexion.php :

Code :
  1. require_once ("../../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
 
J’ai essayé avec Require, Include, sans success.
 
Quelques infos:
- La structure des répertoires, pour partie:
o - racine: connexion.php
o ---- martinot: …
o ------- reserve: messlecture.php
Dans cette même structure, j’ai des fonctions qui sont opérationnelles, comme :
o - racine: connexion.php
o ---- martinot: …
o ------- reserve: messaction.php (même appel avec require_once ("../../connexion.php" );)
 
J’ai fait un test très simplifié avec ces fonctions réduites aux ordres d’appel : même résultat.
 
Cette structure de répertoires est donc très simple, entièrement installée sous la racine du site ; je ne vois aucun motif qui puisse activer OpenBaseDir.
 
Je sèche ; j’aurais loupé un truc gros comme une maison ?
 
Est-ce que OpenBaseDir peut godiller parfois ? Peut-être un problème d’hébergeur ?
 
Est-ce que j’efface tout sur mon site pour tout recréer ?
 
Par avance merci de votre aide.
 
Francois

Reply

Marsh Posté le 23-04-2008 à 13:32:07   

Reply

Marsh Posté le 23-04-2008 à 13:47:59    

tu n'as pas le droit d'aller toucher à des choses en-dehors de ta racine...tu es sûr de ne pas être remonté un cran trop haut?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-04-2008 à 14:18:14    

Non, je ne crois pas, même si ce serait une excellente explication.
 
messlecture.php est 2 niveaux sous connexion.php.
 
Francois

Reply

Marsh Posté le 23-04-2008 à 14:22:50    

Salut,
 
Tu as essayé en mettant des chemins absolus ?

Reply

Marsh Posté le 23-04-2008 à 14:24:40    

avec open_basedir activé il faut utiliser un chemin absolu
 
edit: grilled

Message cité 1 fois
Message édité par soju le 23-04-2008 à 14:25:00
Reply

Marsh Posté le 23-04-2008 à 14:29:47    

J'utilise le même chemin relatif avec mon appel par messaction.php (installé dans le même répertoire que messlecture.php) du même connexion.php et ça marche bien.
 
FFrancois

Reply

Marsh Posté le 23-04-2008 à 14:40:57    

bizarre, les 2 scripts sont appelés de la même façon ? (directement ou à partir d'un autre script ?)
en tous cas en attendant essaye avec le chemin absolu, ça ne coute rien

Reply

Marsh Posté le 23-04-2008 à 14:42:55    

soju a écrit :

avec open_basedir activé il faut utiliser un chemin absolu


Faux, open_basedir permet de juste de restreindre les tentatives d'accès a un fichier que si ce fichier se trouve dans un ou plusieurs répertoire ( cf http://fr.php.net/manual/fr/featur [...] en-basedir )
 
francoisch1, j'ai bien compris que cela marche ailleurs, mais je te demande quand même de tester avec un chemin absolu. En fonction de la config du serveur, les règles peuvent changer d'un répertoire a l'autre.

Message cité 1 fois
Message édité par Melendril le 23-04-2008 à 14:46:05
Reply

Marsh Posté le 23-04-2008 à 14:51:11    

Melendril a écrit :

Faux, open_basedir permet de juste de restreindre les tentatives d'accès a un fichier que si ce fichier se trouve dans un ou plusieurs répertoire

merci mais je savais déjà et par expérience pour éviter ce genre de problème il vaut mieux utiliser un chemin absolu

Reply

Marsh Posté le 23-04-2008 à 17:40:05    

bonjour et merci de vos réponses.
 
Oui, j'avais fait le test avec un chemin absolu et ça fonctionne; j'aimerai autant que possible éviter le chemin absolu.
 
Simplement, mes deux appels:
- sont tous les deux à connexion.php
- depuis le même répertoire (reserve)
- par deux fonctions qui utilisent Require_once
 
Dans un cas, ça marche et pas dans l'autre.
 
C'est pourquoi j'aurais tendance à croire à un incident sur mon appel qui ne marche pas.
 
Une idée: effacer tour et recommencer?
 
Merci de vos conseils dans ce cas assez trouble.
 
Francois

Reply

Marsh Posté le 23-04-2008 à 17:40:05   

Reply

Marsh Posté le 23-04-2008 à 17:43:22    

Petite question :
 
Le fichier dans lequel tu fais le require_once, c'est celui que tu exécutes ou il est lui même inclus ?
 
Si c'est le deuxième choix, le chemin relatif se construit non pas du messlecture.php mais du fichier qui l'inclut.

Reply

Marsh Posté le 23-04-2008 à 17:57:11    

Montre nous une partie du code qui contient ton require_once(), on ne sais jamais mais comme te l'as dis Melendril méfie toi du path lorsque ton fichier est lui même inclus à un autre, c'est l'erreur classique qui peut amener une erreur de ce genre.

Reply

Marsh Posté le 23-04-2008 à 18:00:55    

bonjour Melendril
 
Le fichier qui exécute le Require_once est lui-même inclus dans un autre fichier.
 
Cet autre fichier est situé un répertoire plus haut que celle du Require.
 
Vite vu:
- la fonction initiale est au niveau 2
- la fonction du Require est au niveau 3
- la fonction connexion.php est au niveau 1 (racine)
 
Oui, à propos, c'est vrai que, dans le cas qui fonctionne, la fonction initiale est elle-même au niveau 3, soit au même niveau que la fonction du Require.
 
J'ai bien l'impression que tu as mis le doigt dessus.
 
Il faudrait donc que j'enlève un groupe ../ dans l'appel
 
Je vais essayer.
 
Francois

Reply

Marsh Posté le 23-04-2008 à 18:08:09    

Oui, ça marche, c'était donc ça.
 
J'ignorais tout à fait que le fichier inclus "héritait" de la "hiérarchie" de niveau du fichier appelant.
 
Connaitriez vous une doc en ligne où je pourrait creuser un peu ce sujet pour ne pas me faire reprendre à un autre coin de rue sur ce sujet des niveaux?
 
Merci en tout cas de tous vos efforts car votre aide a été précieuse.
 
Francois

Reply

Marsh Posté le 23-04-2008 à 18:42:33    

francoisch1 a écrit :

Oui, ça marche, c'était donc ça.
 
J'ignorais tout à fait que le fichier inclus "héritait" de la "hiérarchie" de niveau du fichier appelant.
 
Connaitriez vous une doc en ligne où je pourrait creuser un peu ce sujet pour ne pas me faire reprendre à un autre coin de rue sur ce sujet des niveaux?
 
Merci en tout cas de tous vos efforts car votre aide a été précieuse.
 
Francois


il faut juste garder à l'esprit qu'en php inclure un fichier c'est comme copier/coller son code dans le fichier courant...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-04-2008 à 19:08:24    

OK, bien noté et merci.
 
Francois

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed