Incident OpenbaseDir - PHP - Programmation
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?
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
Marsh Posté le 23-04-2008 à 14:24:40
avec open_basedir activé il faut utiliser un chemin absolu
edit: grilled
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
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
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.
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
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
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.
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.
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
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
Marsh Posté le 23-04-2008 à 18:42:33
francoisch1 a écrit : Oui, ça marche, c'était donc ça. |
il faut juste garder à l'esprit qu'en php inclure un fichier c'est comme copier/coller son code dans le fichier courant...
Marsh Posté le 23-04-2008 à 13:32:07
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:.
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