Précédent   Forum des professionnels en informatique > PHP > Outils
Outils Forum d'entraide sur les outils pour développeurs PHP : EDI, installation, administration... Avant de poster : FAQ outils, toutes les FAQ PHP et les comparatifs
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2006, 17h55   #1
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Par défaut [Configuration] Comptage de fichiers bizarre

Bonjour,
Je souhaite compter le nombre de fichiers *.jpg dans un dossier, et les lister.

Pour cela, j'ai fait un mignon petit script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$dir="./images/imagesdiaporama/ESSAI/"; 
$diropen=opendir($dir);
$i=0;
while($file=readdir($diropen)){
	$extension= strtolower(substr(strrchr( $file, "." ), 1 ));
	if($extension==="jpg"){
		@$ext=count($file)+$ext;
			echo "Fichier JPG trouvé n°$i - $file<br>";
		}
	$i++;
}
echo "Nombre de fichiers correspondants à l'extension JPG : $ext<br>";
Bon, ça marche bien sauf que je n'ai que ces fichiers *.jpg dans le dossier, mais que PHP m'en trouve 2 autres (j'ai pourtant la config qu'il faut pour voir les fichiers cachés sous winxp)...

Si je change le script pour trouver ces 2 fichiers, voici ce que je récolte :
Citation:
Fichier JPG trouvé n°0 - .
Fichier JPG trouvé n°1 - ..
Fichier JPG trouvé n°8 - Thumbs.db
Nombre de fichiers correspondants à l'extension JPG : 3
Bon, pour thumbs, OK, pas de problème... mais les 2 autres, comment faire en sorte qu'ils n'apparaissent pas?
Merci !
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 18h06   #2
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Bonsoir,

Il faut faire un test pour exclure ces deux répertoires et c'est obligatoire, bein que je pense que normalement si tu ne prends que l'extension tu ne devrais pas avoir ce problème. Peut-être faudrait-il vérifier ta fonction.

Ensuite, je ne sias pas si cela est important pour toi, mais dans ce script tu ne fait que vérifier l'extension du fichier. En php , il existe une fonction permettant d'avoir le type MIME du fichier et donc d'être sur qu'il s'agit d'une image JPG. il s'agit de la fonction mime_content_type


Par contre je ne comprends pas pourquoi tu fais un count($file), au lieu de faire simplement $ext++

Bonne soirée
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 18h14   #3
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Bonsoir,
Et merci de la réponse rapide !

La fonction mime_content_type semble être la solution... Je vais essayer tout de suite !

Citation:
Par contre je ne comprends pas pourquoi tu fais un count($file), au lieu de faire simplement $ext++
Je débute, alors je fais pas mal de bêtises ou de tests inutiles pour utiliser les fonctions....

Si c'est bien là la réponse à mon souci, je mettrai résolu dès que j'aurai terminé le test !

Merci et bonne soirée !
Gamin
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 18h25   #4
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Désolé mais j'ai une
Citation:
Fatal error: Call to undefined function: mime_content_type() in c:\program files\....\xx.php on line 1
J'ai pourtant bien le fichier magic.mime...

Faut-il configurer le php.ini pour cette fonction?
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 18h46   #5
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 773
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 773
Points : 795
Points : 795
Je sens que je vais poser une question bête mais... je ne comprends pas comment ce code peut donner cette sortie. Même si le recours à count() est frauduleux, le test sur l'extension DOIT éliminer les fichiers ., .. et thumbs.db.

Je viens de tester chez moi avec une petite modif (je lis un tableau et non pas un répertoire) :
Code :
1
2
3
4
5
6
7
8
9
10
11
$dir = array( ".", "..", "thumbs.db", "un.jpg", "deux.jpg" );
$i=0;
foreach ( $dir as $file ) {
	$extension= strtolower(substr(strrchr( $file, "." ), 1 ));
	if($extension=="jpg"){
		$ext=count($file)+$ext;
		echo "Fichier JPG trouvé n°$i - $file<br>";
	}
	$i++;
}
echo "Nombre de fichiers correspondants à l'extension JPG : $ext<br>";
En sortie :
Citation:
Fichier JPG trouvé n°3 - un.jpg
Fichier JPG trouvé n°4 - deux.jpg
Nombre de fichiers correspondants à l'extension JPG : 2
Y-ay-til une subtilité qui m'échappe ??????
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2006, 18h53   #6
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 773
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 773
Points : 795
Points : 795
Citation:
Envoyé par mathieugamin
Désolé mais j'ai une

J'ai pourtant bien le fichier magic.mime...

Faut-il configurer le php.ini pour cette fonction?
Oui : il faut activer l'extension mime_magic.dll
NB : la doc PHP conseille d'utiliser fileinfo à la place.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2006, 09h24   #7
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Bonjour,
J'ai bien activé l'extension, mais j'ai encore une erreur...
Est-ce que ça peut être dû à un fichier endommagé?

Voici l'erreur :
Citation:
Fatal error: mime_magic could not be initialized, magic file (null) is not avaliable in c:\program files\...\fichiers\test_dp.php on line 10
Est-ce que cela dit quelque chose à quelqu'un?

Merci
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2006, 09h46   #8
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
REU !
En fait, j'utilise ce script pour faire un diaporama automatique...

Lorsque se lance mon diaporama, malgré le filtre JPG sur l'extension des fichiers, la page affiche un cadre d'image absente...

Dans les propriétés de cette image, voici ce que j'ai :
Le script doit pourtant aller chercher les fichiers jpeg dans un sous dossiers situé 2 niveaux en dessous !

Par exemple, l'image suivante a pour propriétés :
Donc tout porte à croire qu'il s'agit des "." et ".." des dossiers courant et parent !
Mais pourquoi !!!!???...

Est-ce que ça éclaire quelqu'un ? Parce que moi, là...
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2006, 11h39   #9
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 773
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 773
Points : 795
Points : 795
Citation:
Envoyé par mathieugamin
Bonjour,
J'ai bien activé l'extension, mais j'ai encore une erreur...
Est-ce que ça peut être dû à un fichier endommagé?
Peut-être :
Citation:
Note aux utilisateurs Windows : Afin de pouvoir utiliser ce module en environnement Windows, vous devez activer le chemin jusqu'au fichier magic.mime de votre php.ini.

Exemple 1. Configuration Windows de magic.mimemime_magic.magicfile ="$PHP_INSTALL_DIR\magic.mime"

N'oubliez pas de remplacer la valeur de $PHP_INSTALL_DIR par votre chemin jusqu'à l'exécutable PHP, dans l'exemple ci-desssus. Par exemple, c:\php.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 00h42   #10
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Personnellement, j'aime bien les regexp :

Code :
1
2
3
4
5
6
7
8
9
10
$dir="./images/imagesdiaporama/ESSAI/"; 
$diropen=opendir($dir);
$i=0;
while($file=readdir($diropen)){
	if(preg_match("/\.jpg$/i", $file)) {
             ...
	}
	$i++;
}
echo "Nombre de fichiers correspondants à l'extension JPG : $ext<br>";
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 12h20   #11
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 773
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 773
Points : 795
Points : 795
Oui, je trouve ça aussi plus propre (et plus puissant).
Ou pourrait ajouter qu'un contrôle avec is_dir() serait le bienvenu (et résoudrait le problème ).

Par contre, ça ne répond pas à la question sur le pourquoi du code qui ne marche pas... (ni à la mienne d'ailleurs puisque chez moi... ça marche... )
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 12h46   #12
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Il me semblait que la réponse était claire, mais je me propose de préciser :
dans tout listing de répertoire, tu va inclure les deux répertoires système
. = répertoire courant
.. = répertoire parent

Ce comptage n'est donc pas pas du tout fantaisiste, il avait oublié ces deux répertoires cachés. A noter qu'avec les regexp, ils ne sont pas pris en compte car n'entrant pas dans le motif de recherche.

C'est mieux ?
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 14h19   #13
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 773
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 773
Points : 795
Points : 795
Je me suis mal fait comprendre. Ce qui m'échappe, c'est pourquoi le test sur les extensions cité initialement ne marche pas, vu... qu'il marche chez moi...

Pour les regex, pas de problème, c'est clair.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 14h26   #14
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Très honnêtement, je n'utilise pas mime_magic.
Le travail sur extensions est aussi simple et plus portable puisque ne nécessitant aucune installation ou configuration supplémentaire.
Et ça ne fait pas de mal de classer proprement ses fichiers avec des extensions correctes. AMHA, bien sûr.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 09h11   #15
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Salut,
Merci à vous deux pour toutes ces précisions, cependant le résultat ne change pas...

J'ai pourtant mis en place les deux solutions que vous m'avez données, sans succès...
Code :
1
2
3
4
5
6
7
8
9
<?php 
$dir="./images/imagesdiaporama/ESSAI"; 
$diropen=opendir($dir); $i=0; 
while($file =readdir($diropen)){
	if((preg_match("/\.jpg/i", $file))&&(!is_dir("$file"))) {	
		echo "couv[".$i."] = './images/imagesdiaporama/ESSAI/$file';"; 
		}
	$i++;}
?>
Cependant,
Je trouve qu'il y a un truc bizarre...
Ce script génère le texte d'un Javascript qui me permet de faire tourner les photos... Dans le script final, je ne trouve pas de fichiers "." ou ".." lorsque je consulte la source ...
Code :
1
2
3
4
5
6
7
couv = new Array;
couv[2] = './images/imagesdiaporama/ESSAI/img_nur1_tn.jpg';
couv[3] = './images/imagesdiaporama/ESSAI/img_nur2_tn.jpg';
couv[4] = './images/imagesdiaporama/ESSAI/img_nur3_tn.jpg';
couv[5] = './images/imagesdiaporama/ESSAI/img_nur4_tn.jpg';
couv[6] = './images/imagesdiaporama/ESSAI/img_nur5_tn.jpg';
couv[7] = './images/imagesdiaporama/ESSAI/img_nur6_tn.jpg';
Donc maintenant, je suis encore plus perdu !
Une idée?
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 09h24   #16
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Autre fait troublant, lorsque je copie la soit-disante "image invisible" de mon diaporama, et que je la colle dans un logiciel de bureautique, cela affiche cela :
Code :
1
2
3
4
5
6
7
couv = new Array;
couv[2] = './images/imagesdiaporama/ESSAI/img_nur1_tn.jpg';
couv[3] = './images/imagesdiaporama/ESSAI/img_nur2_tn.jpg';
couv[4] = './images/imagesdiaporama/ESSAI/img_nur3_tn.jpg';
couv[5] = './images/imagesdiaporama/ESSAI/img_nur4_tn.jpg';
couv[6] = './images/imagesdiaporama/ESSAI/img_nur5_tn.jpg';
couv[7] = './images/imagesdiaporama/ESSAI/img_nur6_tn.jpg';
alors que si je fais la même chose avec une des images qui défile, cela colle l'image...

Donc le navigateur interprète le code comme une image...

Que faire?!
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 09h34   #17
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Salut,

En fait, je ne vois plus où est le problème.
Visiblement, tu récupères bien uniquement les images.
C'est ton comptage qui est faux ?

--- edit ---

N'y aurait-il pas une coquille dans le compteur ?

Code :
1
2
3
4
5
6
 
while($file =readdir($diropen)){
	if((preg_match("/\.jpg/i", $file))&&(!is_dir("$file"))) {	
		echo "couv[".$i."] = './images/imagesdiaporama/ESSAI/$file';"; 
        }
	$i++;}
$i s'incrémente même si ce n'est pas une image car il n'est pas dans le bloc 'if'
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 09h44   #18
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Question :
Comment appelle-t-on un mec qui sollicite l'attention de plusieurs personnes pour un problème dont le solution est devant ses yeux?

Réponse :
Un

C'était juste ça ! Cette saloperie de compteur pas dans le bloc while, et pas dans le bloc if.

En tout cas, merci pour les astuces avec les regex, je m'en servirais dès que possible !

Merci encore !

Gamin
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h47.


 
 
 
 
Partenaires

Hébergement Web