Vérification dossier, problème

Satan2k Messages postés 8 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 27 février 2006 - 27 févr. 2006 à 06:33
Satan2k Messages postés 8 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 27 février 2006 - 27 févr. 2006 à 11:05
Voila je fais un explorateur de dossier multi-utilisateurs en ligne mais voila j'ai un problème que je n'arrive pas à résoudre.



Je veux faire en sorte que les membres ne puissent pas interférer aux
dossier des autres membres donc pas les renommer ni les détruire.



Pour cela j'ai déja préparé la chose avec un
$_SESSION['repertoire_membre'] mais voila j'ai essayé un tas de choses
et j'y arrive pas. Ce que je voudrais faire c'est que quand on
execute une modification sur un fichier, si il est pas dans son
répertoire, lui botter le cul
Donc un boolean quoi. Je veux simplement vérifier que mettons le
dossier fichier.php se trouve dans le répertoire dossier



J'ai bien trouvé la fonction in_dir sur la documentation php.net mais le realpath ne fonctionne pas sur le serveur.



Voila le bout de code que j'ai récupéré

// Pour vérifier si un dossier est dans un autre dossier -> Sécurité multi utilisateur

function in_dir ($file, $in_dir)

{

$dir = realpath($file);

$in_dir = realpath($in_dir);



if (!is_dir($file))

{

$dir = dirname ($file);

}



do

{

if ($dir === $in_dir)

{

$is_in_dir = TRUE;

break;

}

}

while ($dir !($dir dirname ($dir)));



return (bool) @$is_in_dir;

}

7 réponses

Satan2k Messages postés 8 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 07:42
Apres plusieurs coup sur la tête, quelques clopes et beaucoup de patientes j'ai réussi a prendre le dessus.

Voici le code


function in_dir($verify,$dir)
{
// Définition pour les boucles
$directory = opendir($dir);
my_alert('on ouvre '.$dir);

// Simple boucle
while($file=readdir($directory))
{
if ($file!='.'&&$file!='..') // Cela va de soi
{
if (is_dir($file)) // Si c'est un repertoire
{
if($file==$verify){ // Si c'est ce qu'on cherchait
return true; // C'est bon
}
else {
in_dir($verify,$file); // Sinon on recommence
}
}
if (file_exists($verify)) // Si on trouve le fichier
return true; // Alors c'est bon
}
}
return false; // Sinon par défaut on retourne faux
}
0
Satan2k Messages postés 8 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 07:43
arg qu'est ce que ce forum m'a fait avec mes tabulations :( snif snif code pas beau :p
0
Satan2k Messages postés 8 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 07:44
et my_alert est une fonction personnelle, a enlever si vous voulez pas faire planter :D
0
Satan2k Messages postés 8 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 08:05
Hmmm visiblement je me suis trop emporté, ca fonctionne pas :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Satan2k Messages postés 8 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 10:07
version corrigée et fonctionnelle et je me suis embeté avec la
colorisation syntaxique rien que pour vous (et pour m'excuser des
postes inutiles aussi )



// Pour vérifier si un dossier est dans un autre dossier -> Sécurité multi utilisateur

function in_dir($toverify,$dir)

{



// Ne permet pas d'ouvrir un fichier qui vient d'un dossier parent

if (preg_match('!/\.\./!',$toverify))

return false;



// Définition pour les boucles

$toverify = basename($toverify);

$directory = opendir($dir);



// On parcours les dossiers du membre a la recherche du fichier

while ($file =readdir($directory))

{

if ($file!='.'&&$file!='..')

{

$sub = $dir.'/'.$file;



if (file_exists($file))

{

// Le fichier existe, l'utilisateur peut continuer

return true;

break;

}

else

{

// Le fichier n'existe pas, on vérifie les autres dossiers

if(is_dir($sub))

in_dir($verify,$sub);

}

}

}

}
0
Satan2k Messages postés 8 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 11:05
// Pour vérifier si un dossier est dans un autre dossier -> Sécurité multi utilisateur
function in_dir($toverify,$dir)
{

// Ne permet pas d'ouvrir un fichier qui vient d'un dossier parent
if (preg_match('!/\.\./!',$toverify))
return false;

// Définition pour les boucles
$toverify = basename($toverify);
$directory = opendir($dir);

// On parcours les dossiers du membre a la recherche du fichier
while ($file =readdir($directory))
{
if ($file!='.'&&$file!='..')
{
$sub = $dir.'/'.$file;

if (file_exists($dir.'/'.$toverify))
{
// Le fichier existe, l'utilisateur peut continuer
return true;
break;
}
else
{
// Le fichier n'existe pas, on vérifie les autres dossiers
if(is_dir($sub))
in_dir($toverify,$sub);
}
}
}
}



Apres correction des bugs. Si un admin passe par la il peut
supprimer tous les posts précédents . (et pas m'envoyer aux Teletubbies
si possible :p)
0
Satan2k Messages postés 8 Date d'inscription dimanche 20 juin 2004 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 11:05
// Pour vérifier si un dossier est dans un autre dossier -> Sécurité multi utilisateur
function in_dir($toverify,$dir)
{

// Ne permet pas d'ouvrir un fichier qui vient d'un dossier parent
if (preg_match('!/\.\./!',$toverify))
return false;

// Définition pour les boucles
$toverify = basename($toverify);
$directory = opendir($dir);

// On parcours les dossiers du membre a la recherche du fichier
while ($file =readdir($directory))
{
if ($file!='.'&&$file!='..')
{
$sub = $dir.'/'.$file;

if (file_exists($dir.'/'.$toverify))
{
// Le fichier existe, l'utilisateur peut continuer
return true;
break;
}
else
{
// Le fichier n'existe pas, on vérifie les autres dossiers
if(is_dir($sub))
in_dir($toverify,$sub);
}
}
}
}



Apres correction des bugs. Si un admin passe par la il peut
supprimer tous les posts précédents . (et pas m'envoyer aux Teletubbies
si possible :p)
0
Rejoignez-nous