Bonjour,
finalement, on n'est pas obligé de renommer le fichier, ni le déplacer.
SI, jusqu'à présent, tu affichais l'image avec :
<img src="./cam/meteoplerin.jpg" alt="" />
AVEC le code suivant, tu devrait pouvoir afficher "la plus récente" avec :
<img src="<?php echo explore_dir_get_newest_image_delete_useless('./cam'); // image la plus récente ?>" />
Sera de la forme :
<img src="./cam/2021/10/12/meteoplerin_00_20211012224356.jpg" alt="" />
Code PHP :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| <?php
// -----------------------------
// Fonction : Explorateur de dossier / récupération du fichier image le plus récent
// Arborescence : annee/mois/jour/image
// -------------------------------------------------
function explore_dir_get_newest_image_delete_useless( $dir, $niv=0 )
{
$result = null;
if( $handle = opendir($dir) )
{
// -------------
$niv_nbr = 3; // nombre de niveaux : 3 ( annee / mois / jour )
$rep_max = 0; // dossier le plus grand ( annee / mois / jour )
$dat_max = 0; // date de dernière modification (la plus grande = récente)
$img_url = ''; // URL de l image à récupérer
$rep_all = []; // dossiers à supprimer
$fil_all = []; // fichiers à supprimer
// -------------
while ( false !== ($elt = readdir($handle)) )
{
// $elt : dossier ou fichier
// ---------
// niv = 0 : annee
// niv = 1 : mois
// niv = 2 : jour
// niv = 3 : image
// ---------
if( $elt!='..' && $elt!='.' )
{
// -----
// dossier
if( is_dir($dir.'/'.$elt) )
{
$rep_all[] = $elt;
if( $niv<$niv_nbr )
{
$rep_max = ( $rep_max < intval($elt) )? $elt : $rep_max; // le plus grand
}
}
// -----
// fichier
else
{
$fil_all[] = $elt;
if( $niv==$niv_nbr )
{
if( $dat_max<filemtime($dir.'/'.$elt) ) // date de dernière modification (la plus grande = récente)
{
$dat_max = filemtime($dir.'/'.$elt);
$img_url = $elt;
}
}
}
// -----
}
}
closedir($handle);
// -------------
// dossiers à supprimer
if( !empty($rep_all) )
{
$rep_del = ( intval($rep_max)>0 )? array_diff( $rep_all, [$rep_max] ) : $rep_all;
foreach( $rep_del as $rep )
{
medias_suppression_fichiers_dossier( realpath($dir.'/'.$rep) );
}
}
// -------------
// fichiers à supprimer
if( !empty($fil_all) )
{
$fil_del = ( !empty($img_url) )? array_diff( $fil_all, [$img_url] ) : $fil_all;
foreach( $fil_del as $fil )
{
@unlink( realpath($dir.'/'.$fil) );
}
}
// -------------
// resultat
if( $niv<$niv_nbr && intval($rep_max)>0 )
{
$result .= explore_dir_get_newest_image_delete_useless( $dir.'/'.$rep_max, $niv+1 );
}
elseif( $niv==$niv_nbr )
{
$result = $dir.'/'.$img_url; // URL du fichier
}
// -------------
}
return $result;
};
// -------------------------------------------------
// Fonction : SUPPRESSION de FICHIERS ET DOSSIERS (et tout son contenu)
// -------------------------------------------------
function medias_suppression_fichiers_dossier( $file )
{
if( !empty($file) && file_exists(realpath($file)) )
{
$path = realpath($file);
// -------------
// dossier
if( is_dir($path) )
{
$dir = scandir($path, SCANDIR_SORT_DESCENDING);
foreach($dir as $file_in_dir){
if($file_in_dir == '.' or $file_in_dir == '..'){
@rmdir($path); // c'est un dossier vide : suppression du dossier
break; // on sort de la boucle
} else {
// (récursivité)
medias_suppression_fichiers_dossier($path.'/'.$file_in_dir);
}
}
// -------------
// fichier
} else {
@unlink($path); // suppression du fichier
}
// -------------
}
};
// -------------------------------------------------
?> |
La fonction :
- recherche les dossiers les plus grands (= plus récent) : annee / mois / jour
- supprime les autres dossiers
- recherche le fichier le plus récent
- supprime les autres fichiers
Et ce, uniquement au moment de l'affichage de l'image. (et pas toutes les 5')
Partager