Liste le nombre d'images identiques dans un dossier [Résolu]

Signaler
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010
-
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
-
Bonjour,
Je voudrais afficher le nombre d'images identiques dans un dossier.
C'est dire connaitre le nombre d'images commençant ainsi AZETRPMON1000_1, AZETRPMON1000_2,...
J'utilisai glob :
-------------------------------------
$files = glob("../../Images/500500/".$val['Reference']."*.jpg");
$compteur = count($files);
echo "Il y a $compteur photo";
 If ($compteur > 1) { echo "s"; }
echo " en cliquant l'agrandissement.
-------------------------------------
Mais glob ne fonctionne pas chez free et j'ai trop de mal avec opendir() car je cherche à connaitre le nombre de certain fichier du dossier et non pas tous les fichiers du dossier.
Merci pour un coup de main ;)

23 réponses

Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Un grand merci et en plus j'ai tout compris
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
Regarde voir du coté de DirectoryIterator, qui devrait te donner tout ce dont tu a besoin.

DirectoryIterator utilise php5, free ne le fait pas de base, mais un .htaccess devrait solutionner ton problème.

Bonne journée

http://www.ReFlectiv.Net
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Je suis pas assez calé que toi. Mon code fesait 3 lignes.
Je demande pas le code tout fait mais le princepe de fonctionnement.
Il faut ouvrir le dossier regarder dans une boucle les fichiers commençant pareil.
fermer le dossier et faire un count?
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
$oD = new DirectoryIterator ('./ton/dossier/');

$iCount = 0;
foreach ($oD as $element) {
    if (!$oD->isDot ())
        $iCount++;
}

$iCount devrait te retourner le nombre de fichier dans le dossier, si je ne me suis pas trompé.

http://www.ReFlectiv.Net
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Fatal error: Cannot instantiate non-existent class: directoryiterator
 PHP Version 4.3.10
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
Il te faut php 5.
Free le propose, tu doit juste créer un fichier .htacces et y ajouter une directive que tu trouvera sur google (free+htaccess+php5)
Sinon essaye de nommer tes fichiers .php5 ?

http://www.ReFlectiv.Net
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Avec la fonction suivante, j'ai le nombre total de fichiers dans un dossier, mais ce que je voudrais c'est le nombre de fichiers commençant par AZETRPMON1000_

-----------------------------------------------------------------------------------------
$num_images = count_files("../../Images/500500/");
function count_files($dir)
{
$num = 0;
$dir_handle = opendir($dir);
 while($entry = readdir($dir_handle))
  if(is_file($dir.'/'.$entry))
    $num++;
   closedir($dir_handle);
    return $num;
}
echo $num_images;
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
$num_images = count_files("../../Images/500500/");
function count_files($dir)
{
$num = 0;
$dir_handle = opendir($dir);
 while($entry = readdir($dir_handle))
  if(is_file($dir.'/'.$entry) && substr ($entry, 0, 14) == 'AZETRPMON1000_')
    $num++;
   closedir($dir_handle);
    return $num;
}
echo $num_images;

http://www.ReFlectiv.Net
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Super et pourquoi ça marche pas quand je remplace la valeur en dure par ma valeur en base.
Merci pour ta patience
-----------------------------------------------------------------
$num_images = count_files("../../Images/500500/");
function count_files($dir)
{
$num = 0;
$dir_handle = opendir($dir);
 while($entry = readdir($dir_handle))
  if(is_file($dir.'/'.$entry) && substr ($entry, 0, 13) == $val["Reference"])
    $num++;
   closedir($dir_handle);
    return $num;
}
echo "".$num_images."";
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
Parce que substr retourne la chaine de caractère indiquée en premier paramètre, à partir du second paramètre sur une longueur du troisieme parametre. En l'occurence, il prends la valeur $entry, de 0 sur une longueur de 13. Si $val['reference'] ne fait pas 13 de long, ca ne marchera pas forcément. Donc tu met :

substr ($entry, 0, strlen ($val["Reference"])) == $val["Reference"])

http://www.ReFlectiv.Net
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Ca me retourne le nombre total de fichier du dossier :-(.
Je me tire les cheveux.
$num_images = count_files("../../Images/500500/");
function count_files($dir)
{
$num = 0;
$dir_handle = opendir($dir);
 while($entry = readdir($dir_handle))
  if(is_file($dir.'/'.$entry) && substr ($entry, 0, strlen ($val['Reference'])) == $val['Reference'])
    $num++;
   closedir($dir_handle);
    return $num;
}
echo "".$num_images."";
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
$val['Reference'] n'a aucune valeur dans une fonction car sa portée n'est pas globale :

$num_images = count_files("../../Images/500500/", $val['Reference']);
function count_files($dir, $reference)
{
$num = 0;
$dir_handle = opendir($dir);
 while($entry = readdir($dir_handle))
  if(is_file($dir.'/'.$entry) && substr ($entry, 0, strlen ($reference)) == $reference)
    $num++;
   closedir($dir_handle);
    return $num;
}
echo "".$num_images."";

http://www.ReFlectiv.Net
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Le même code dans une autre page j'ai cette erreur :
Fatal error: Call to undefined function: count_files()
C'est incompréhenssible.
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
tu inclu le fichier contenant la fonction ?
Parce que apparement il n'accède pas à ce fichier ! :p

http://www.ReFlectiv.Net
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Non j'ai pas encore mis la function à part, elle est directement dans le code de la page.
J'ai pris exactement le code entre des balises <td> et dans l'autre page j'ai l'erreur.
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
fait voir ton code ?

http://www.ReFlectiv.Net
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

                                        <td height="40" valign="middle" colspan="3">
                                         
                                            <?
           echo "../../absolut/Images/500500/
".$val['Reference'];
          $num_images = count_files("../../absolut/Images/500500/", $val['Reference']);
          function count_files($dir, $Reference)
          {
          $num = 0;
          $dir_handle = opendir($dir);
           while($entry = readdir($dir_handle))
            if(is_file($dir.'/'.$entry) && substr ($entry, 0, strlen ($Reference)) == $Reference)
           $num++;
          closedir($dir_handle);
          return $num;
          }
          echo "Il y a $num_images photo";
          If ($num_images > 1) { echo "s"; }
                                        echo " en cliquant l'agrandissement.
".
                                        </td>

Résultat :
../../absolut/Images/500500/
SAIFANFAN1000
Fatal error: Call to undefined function: count_files() in d:\
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

C'est simple je prend le code de la page qui ne fonctionne pas et je le remplace par celui dont la page fonction. Résultat aucun changement la page qui fonctionnait fonctionne toujours malgré le changement de code.
A ce coller une balle même s'il doit y avoir une explication.
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
essaye voir :

          function count_files($dir, $Reference)
          {
          $num = 0;
          $dir_handle = opendir($dir);
           while($entry = readdir($dir_handle))
            if(is_file($dir.'/'.$entry) && substr ($entry, 0, strlen ($Reference)) == $Reference)
           $num++;
          closedir($dir_handle);
          return $num;
          }
          $num_images = count_files("../../absolut/Images/500500/", $val['Reference']);

bien que je n'y croie pas.
Tu es sur que le répertoire est valide ?

http://www.ReFlectiv.Net
Messages postés
33
Date d'inscription
lundi 13 septembre 2004
Statut
Membre
Dernière intervention
10 juillet 2010

Et si pourtant c'est ça. Faudra m'expliquer pourquoi?