Page 1 sur 1

[PHP.INI] fonctionnement de safe_mode_include_dir

Posté : 23 janv. 2007, 17:41
par pierroty
J'ai un problème avec la fonction stat() sur un fichier.
Voici l'environnement: 8-)
Je bosse sous Mandrake 10.1, avec un php 5.0.3 Je dois consulter un fichier sur un autre pc. Pour ça, j'ai fais un petit montage nfs de ce fichier dans le répertoire /mnt/repertoire. Comme je suis prudent, j'essaie de garder le mode safe et j'ai renseigné le php.ini de la manière suivante:

Code : Tout sélectionner

safe_mode = On safe_mode_gid = Off safe_mode_include_dir = /mnt/repertoire/
Je retrouve bien ces infos quand je lance un phpinfo().
Mais quand je lance la commande

Code : Tout sélectionner

$aStat = stat('mnt/Manager.log');
:( J'ai l'erreur suivante:
Warning: stat() [function.stat]: SAFE MODE Restriction in effect. The script whose uid is 100 is not allowed to access /mnt/repertoire/fichier.txt owned by uid 2000 in /repPHP/tst.php on line 2
Warning: stat() [function.stat]: stat failed for /mnt/repertoire/fichier.txt in /repPHP/tst.php on line 2
Soit j'ai pas compris comment ça fonctionnait, soit j'ai oublié quelquechose... ou bien :?: ...

Posté : 30 janv. 2007, 01:17
par patbator
Hello,

le safe mode impose des restrictions plus poussées sur les permissions des fichiers et pas seulemnt sur leur emplacement : http://www.php.net/manual/fr/features.s ... .safe-mode

Posté : 30 janv. 2007, 10:13
par pierroty
:-s ... certes ... comment dire ... #-o ... le problème est que je veux que mon script php lise un fichier qui ne lui appartienne pas alors que le safe_mode est activé. J'ai cru comprendre que pour palier à ce problème, il existait la directive safe_mode_include_dir. Lorsque cette directive était renseignée, tout les fichiers ouverts dans ce répertoire n'étaient pas soumis à la vérification de leurs GID/UID... ce qui correspond à ce que je cherche 8-| ... mais ça n'a pas l'air de fonctionner dans mon cas :-k.

:arrow: Où est donc mon erreur |*() ... :?: :!: :!:

Posté : 30 janv. 2007, 13:27
par titerm
A tout hasard, dans la doc, il est bien spécifié que la restriction est un préfixe et non un path. Si dans le php engine, le test est effectué sur le préfixe pur, ton appel ne match pas
essai avec un / au debut comme dans ta directive.

$aStat = stat('/mnt/Manager.log');

Posté : 30 janv. 2007, 18:45
par pierroty
Concernant

Code : Tout sélectionner

$aStat = stat('/mnt/Manager.log');
J'avais en effet oublié le '/' de début, mais ça ne change rien, j'ai toujours php qui vérifie les UID/GID sur le répertoire du safe_mode_include_dir

:shock: :-k ... je comprends toujours pas! Je crois que je vais laissé tomber le safe_mode, mais si vous avez des suggestions, je suis tout ouïe :roll:

Posté : 30 janv. 2007, 20:59
par titerm
Juste une idée comme ca, le fait que tu soit sur /mnt me fais penser que c'est peut etre un montage nfs... Auquel cas ton pb est plus sur le serveur de partage que sur php.
Valide la méthode sur un file system local, puis ensuite, creuse coté NFS.