Comparer des dossiers sur ftp et enregistrement en BD ?

tryan

WRInaute passionné
Bonjour,

Je tente de comparer des noms de dossiers enregistrer en BD et des dossiers présent sur mon ftp pour afficher que les dossier qui ne sont pas présent en BD mais ça bugeeeeeeee !!

Code:
<?php
$adresse = 'photo/';
$dossierftp = opendir($adresse);
//on va chercher le nom des dossiers
$query = mysql_query("SELECT dossier_image FROM MATABLE");

while($page = mysql_fetch_array($query))
{
//on va chercher les dossiers sur ftp
	while ($Fichier = readdir($dossierftp))
	{  
		if ($Fichier != "." && $Fichier != ".." && $Fichier != $page['dossier_image']) 
		{ 
			echo 'Dossier à effacer : '.$Fichier.'<br/>'; 
		}
	}
}
closedir($dossierftp); //Fermeture du dossier. 
?>

Mon code affiche tout les dossiers au lieu de m'afficher que les dossiers en trop .. pourquoi ?

Merci
 

halbo

Nouveau WRInaute
Bonjour,

Je pense qu'il faut inverser tes deux boucles.
D'abord le while sur tes dossiers. Pour chaque dossier, tu vérifies s'il existe dans la base. Si non, tu l'affiches.

A+
Alain
 

tryan

WRInaute passionné
Salut,

Code:
<?php
$adresse = 'photo/';
$dossierftp = opendir($adresse);
//on va chercher le nom des dossiers
$query = mysql_query("SELECT dossier_image FROM MATABLE");

//on va chercher les dossiers sur ftp
   while ($Fichier = readdir($dossierftp))
   { 
    while($page = mysql_fetch_array($query))
    {
      if ($Fichier != "." && $Fichier != ".." && $Fichier != $page['dossier_image'])
      {
         echo 'Dossier à effacer : '.$Fichier.'<br/>';
      }
   }
}
closedir($dossierftp); //Fermeture du dossier.
?>
 

halbo

Nouveau WRInaute
Hello,

Ajoute un peu de code pour débugger et voir ce qui ne va pas.
Par exemple, avant le "if", affiche les variables :

Code:
echo $Fichier;
echo $page['dossier_image']

ou encore var_dump $page; pour afficher tout le tableau.

Complète aussi ta boucle if avec un else et ajoute une phrase qui s'affiche quand la condition du if n'est pas réalisée. Par exemple "Le fichier existe".

A+
Alain
 

tryan

WRInaute passionné
Dans le code juste au dessus et juste avant le "if", un "echo $page['dossier_image']" est ok, par contre un "echo $Fichier;" n'affiche rien.
 

halbo

Nouveau WRInaute
Ok, donc il faut sans doute revoir ta variable $adresse.
Par exemple, essaye avec une adresse complète depuis la racine de ton hébergement.
Un truc du genre /var/www/html/d123456/htdocs/photo/
A voir selon ton hébergeur.

A+
Alain
 

tryan

WRInaute passionné
Je te remercie de me donner réponse :).

Je viens d'essayer avec le chemin absolu et ça ne change rien. A partir du moment ou les boucles sont imbriquées, ça ne fonctionne pas!
Par contre, l'une au dessus de l'autre m'affiche tout correctement mais séparément .. j'y pige plus rien.
 

halbo

Nouveau WRInaute
Gasp, bizarre effectivement.
Tu as essayé avec un "else", juste pour voir si le script entre dans cette boucle ou pas ?

A+
Alain
 

tryan

WRInaute passionné
Si je fais :
Code:
<?php
$adresse = 'photo/';
$dossierftp = opendir($adresse);
//on va chercher le nom des dossiers
$query = mysql_query("SELECT dossier_image FROM MATABLE");

//on va chercher les dossiers sur ftp
   while ($Fichier = readdir($dossierftp))
   {
    while($page = mysql_fetch_array($query))
    {
      if ($Fichier != "." && $Fichier != ".." && $Fichier != $page['dossier_image'])
      {
         echo 'Dossier à effacer : '.$Fichier.'<br/>';
      }
	  else
	  {
	  echo 'Dossier à effacer : '.$Fichier.'<br/>';
	  }
   }
}
closedir($dossierftp); //Fermeture du dossier.
?>
J'ai un gros kedal.

Si j'inverse les 2 boucles, c'est le "echo" du "if" qui renvoie tout les dossiers sans exceptions.
Code:
<?php
$adresse = 'photo/';
$dossierftp = opendir($adresse);

$query = mysql_query("SELECT dossier_image FROM MATABLE");

while($page = mysql_fetch_array($query))
{
    while ($Fichier = readdir($dossierftp))
    {
        if ($Fichier != "." && $Fichier != ".." && $Fichier != $page['dossier_image'])
        {
            echo 'Dossier à effacer : '.$Fichier.'<br/>';
        }
        else
        {
            echo 'Dossier à effacer : '.$Fichier.'<br/>';
        }
    }
}
closedir($dossierftp);
?>
Dans les 2 cas, le "else" ne renvoie rien et le "if" ne me renvoie pas ce que j'attends 8O !

Le champ "dossier_image" est un champ de type INT(10) qui enregistre le timestamp du moment. Mes dossiers portent donc comme nom le timestamp du moment ou il sont créés.

J'ai beau tout contrôler et re contrôler ... je ni pige rien ... je ne vois pas pourquoi ça cloche.
 

Discussions similaires

Haut