Vérification dossier, problème

Signaler
Messages postés
8
Date d'inscription
dimanche 20 juin 2004
Statut
Membre
Dernière intervention
27 février 2006
-
Messages postés
8
Date d'inscription
dimanche 20 juin 2004
Statut
Membre
Dernière intervention
27 février 2006
-
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

Messages postés
8
Date d'inscription
dimanche 20 juin 2004
Statut
Membre
Dernière intervention
27 février 2006

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
}
Messages postés
8
Date d'inscription
dimanche 20 juin 2004
Statut
Membre
Dernière intervention
27 février 2006

arg qu'est ce que ce forum m'a fait avec mes tabulations :( snif snif code pas beau :p
Messages postés
8
Date d'inscription
dimanche 20 juin 2004
Statut
Membre
Dernière intervention
27 février 2006

et my_alert est une fonction personnelle, a enlever si vous voulez pas faire planter :D
Messages postés
8
Date d'inscription
dimanche 20 juin 2004
Statut
Membre
Dernière intervention
27 février 2006

Hmmm visiblement je me suis trop emporté, ca fonctionne pas :(
Messages postés
8
Date d'inscription
dimanche 20 juin 2004
Statut
Membre
Dernière intervention
27 février 2006

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);

}

}

}

}
Messages postés
8
Date d'inscription
dimanche 20 juin 2004
Statut
Membre
Dernière intervention
27 février 2006

// 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)
Messages postés
8
Date d'inscription
dimanche 20 juin 2004
Statut
Membre
Dernière intervention
27 février 2006

// 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)