Ranger des images

Petit nouveau ! | 3 Messages

17 avr. 2015, 20:31

Bonjour,

je dispose dans un dossier d'images classées par série (qui contient plusieurs dizaines d'images). Les images sont toute nommées toute de la sorte :

nom_de_la_serie-numero.jpg

Par exemple : foot_2013-022.jpg, pont-543.jpg, ...

je souhaiterais ranger toutes ces images dans des sous-répertoires dédiés à chaque série, il me faut donc créer en fonction des images présentes des dossiers qui portent le même nom que le nom_de_la_serie. C'est à dire par exemple les dossiers : "foot_2013" ou "pont".

C'ets là que le bas blesse je viens de découvrir la POO et je m'interroge face à un tel projet. Plusieurs questions :

faut-il utiliser l'upload ? La fonction mkdir() pour créer des dossiers ?

Je ne veux pas un code tout prêt j'insiste mais juste des pistes pour me permettra d'appréhender cette tache.


Merci d'avance pour votre aide que j'espère généreuse.

Mammouth du PHP | 688 Messages

17 avr. 2015, 20:33

mkdir glob et rename

Petit nouveau ! | 3 Messages

17 avr. 2015, 20:35

Merci pour cette réponse rapide mais quel est le sens de glob ?

Et à quel moment faire intervenir rename ?

Avatar du membre
Mammouth du PHP | 1609 Messages

17 avr. 2015, 20:51

Pas besoin de faire de programmation orienté objet pour ce script.

Un simple algorithme suffit :
- lecture du répertoire des images (opendir, readdir, closedir)
- pour chaque image extraction du nom de la série (au choix, preg_match, explode, substr, ...)
- test de l’existence du répertoire de destination et création s'il n'existe pas (is_dir, mkdir)
- déplacement du fichier dans le répertoire (rename)

Fais quand même un backup de tes images avant de mettre le bazar dedans. ^^
Tu pourras t'en débarrasser quand tu seras sur de ton script.
Développeur web depuis + de 20 ans

Petit nouveau ! | 3 Messages

17 avr. 2015, 23:04

Voilà un code qui marche ! Mais je souhaiterais l'optimiser au maximum.
<?php

class Image
{
    public function getImages($image_dir)
    {
        if($handle = opendir($image_dir))
        {
            while(false !== ($entry = readdir($handle)))
            {
                if(($entry != '.') and ($entry != '..') and ($entry != '.DS_Store'))
                {
                    $images[] = $entry;             
                }
            }
        }
    closedir($handle);
    return $images;
    }
}



$image_dir = '/Applications/MAMP/htdocs/projet_image/vrac/';
$avions = '/Applications/MAMP/htdocs/projet_image/photos/avions/';
$montagne = '/Applications/MAMP/htdocs/projet_image/photos/montagne_2009/';
$photos = '/Applications/MAMP/htdocs/projet_image/photos/';
$image = new Image();
$images = $image->getImages($image_dir);

if(!is_dir($photos))
{
    mkdir($photos);
}
foreach($images as $key => $name)
{
    $explode = explode('-',$name);
    if($explode[0] == 'avions')
    {
        if(!is_dir($avions))
        {
            mkdir($avions);
            rename($image_dir.$name,$avions.$name);
        }
        else
        {
            rename($image_dir.$name,$avions.$name);
        }
    }
    elseif($explode[0] == 'montagne_2009')
    {
        if(!is_dir($montagne))
        {
            mkdir($montagne);
            rename($image_dir.$name,$montagne.$name);
        }
        else
        {
            rename($image_dir.$name,$montagne.$name);
        }
    }
}
?>

<!DOCTYPE html>
<html>
    
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <title>PREMIERS PAS AVEC BRACKETS</title>
        <meta name="description" content="An interactive getting started guide for Brackets.">
        <link rel="stylesheet" href="main.css">
    </head>
    <body>
        
<h1> Rangement d'images </h1>



<?php
$image = new Image();
$images_avion = $image -> getImages($avions);
$images_montagne = $image -> getImages($montagne);


 echo '<h2>Liste des photos d\'avions</h2><ul>' ;

foreach($images_avion as $id => $avion)
{
    echo '<li>' .$avion. '</li>';
}
?>
</ul>

    <?php
     echo '<h2>Liste des photos de montagne_2009 </h2><ul>' ;

foreach($images_montagne as $id => $montagne)
{
    echo '<li>' .$montagne. '</li>';
}
?>
</ul>
    
    
</body>
</html>