Propriétés jpg

Eléphant du PHP | 256 Messages

20 janv. 2011, 14:47

Bonjour,
J'utilise en PHP le commandes suivantes pour mettre les noms de fichier dans une table
$dir = opendir("Images");
while($file = readdir($dir))
$tab[] = array($file);
Il s'agit de fichiers jpg.

J'aimerais savoir comment je peux obtenir les propriétés de chaque fichier, notamment ses dimensions en pixels.

Merci d'avance

ViPHP
xTG
ViPHP | 7331 Messages

20 janv. 2011, 15:43

Les fonctions stat() et getimagesize(). :)

Eléphant du PHP | 256 Messages

20 janv. 2011, 17:02

getimagesize est bien ce que je cherchais
Merci pour la réponse rapide et efficace.
Rudy

ViPHP
ViPHP | 5462 Messages

20 janv. 2011, 17:05

et utilise glob pour lister tes fichier ca sera plus simple

Eléphant du PHP | 256 Messages

20 janv. 2011, 17:24

Merci pour l'info mais je n'ai pas compris comment utiliser glob.
Pour l'instant je fais comme ceci

//Sort function
function cmp($a,$b)
{
return ($a[0] < $b[0]) ? -1 : 1;
}

$dir = opendir("Images");

// fill array with files names
while($file = readdir($dir))
{
if(substr($file,-3)=="jpg") $tab[] = array($file);
}

// sort array
usort($tab, "cmp");

et j'utilise ensuite l'array pour afficher les images, leurs noms et leurs tailles.
Comment faire avec glob si c'est plus simple ?

ViPHP
xTG
ViPHP | 7331 Messages

20 janv. 2011, 19:12

$tableau = glob("/dossier/*.jpg");
Tous les fichiers jpg (et uniquement eux) du dossier. ;)

Eléphant du PHP | 256 Messages

20 janv. 2011, 19:28

Qu'est-ce qui cloche ?

$tab = glob("/Images/*.jpg");
usort($tab, "cmp");

donne Warning: usort() expects parameter 1 to be array, boolean given

et

$tab = glob("Images/*.jpg");
usort($tab, "cmp");
foreach($tab as $elem)
{
list($width, $height) = getimagesize("Images/".$elem[0]);

donne Warning: getimagesize(Images/I): failed to open stream: No such file or directory

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 janv. 2011, 20:32

yop,

a priori glob retourne false, c'est généralement parce que le chemin n'est pas bon ou le masque).

le / indique la racine du systeme de fichier et nom la racine de ton site web, enlève le ou ajouter de .. pour utiliser un chemin relatif à ta position ou utilise le chemin depuis la racine (genre /var/www/toi/tonsite/images/*.jpg).

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 256 Messages

21 janv. 2011, 10:45

Bonjour,

Effectivement
$tab = glob("/Images/*.jpg");
usort($tab, "cmp"); ne fonctionne pas probablement parce que $tab = false

Mais avec
$tab = glob("Images/*.jpg"); où "Images" est le chemin relatif à la position du fichier PHP.
usort($tab, "cmp"); ne rouspète pas donc je suppose que $tab est bien rempli
foreach($tab as $elem) fonctionne aussi d'ailleurs

alors pourquoi getimagesize("Images/".$elem[0]); ne fonctionne pas ?
si j'ai bien compris le message le premier $elem[0]) = "I" : d'où vient ce "I" ?

ViPHP
xTG
ViPHP | 7331 Messages

21 janv. 2011, 10:58

Certaines fonctions PHP ne fonctionnent qu'avec un chemin relatif et d'autres avec un chemin absolu. ;)

Eléphant du PHP | 256 Messages

21 janv. 2011, 11:11

Certaines fonctions PHP ne fonctionnent qu'avec un chemin relatif et d'autres avec un chemin absolu. ;)
Peut-être mais ça ne me dit pas comment je dois utiliser glob.
Donc je garde opendir / readdir qui fonctionnent bien.
Et encore merci pour getimagesize.

ViPHP
xTG
ViPHP | 7331 Messages

21 janv. 2011, 11:56

glob() renvoie le chemin complet, et pas seulement le nom du fichier.

Eléphant du PHP | 256 Messages

21 janv. 2011, 12:10

Est-ce que je comprends bien que je devrais utiliser
getimagesize($elem[0]);
au lieu de
getimagesize("Images/".$elem[0]);

J'affiche les images dans une table avec le nom du fichier sous chaque image; voir ici http://www.rudyv.be/Aquarium/Images.php
Ce qui m'ennuie alors c'est que si la table contient le chemin complet ça va être trop long sous l'image.
Ou alors je dois extraire le nom du fichier xxx.jpg du chemin complet avec un substr.

Y a-t-il vraiment un avantage à utiliser glob plutôt que opendir / readdir ?

ViPHP
ViPHP | 5462 Messages

21 janv. 2011, 12:13

c'est sur $elem tout cours qui faut le faire. glob est plus simple que le reste ton oui c'est un avantage

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 janv. 2011, 12:17

salut,

plus simple d'utilisation tu a directement les élément voulus dans le tableau sans autre tri.

Par contre suivant ton utilisation effectivement tu va peut être devoir faire un peut de ménage dans ce qui est retourné. regarde la fonction basename et consor :)


@+
Il en faut peu pour être heureux ......