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 124 125 126 127 128 129 130 131 132
| <?php
// -----------------------------
// image
// -----------------------------
$image_url = explore_dir_get_newest_image_3_level('./cam'); // image la plus récente
$image_info = getimagesize( $image_url );
header( "Content-type: ".$image_info['mime'] );
readfile( $image_url );
// -----------------------------
// 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_3_level( $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);
// -------------
// suppression des dossiers et fichiers inutiles
// -------------
// 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) );
}
}
// -------------
// résultat
if( $niv<$niv_nbr && intval($rep_max)>0 )
{
$result .= explore_dir_get_newest_image_3_level( $dir.'/'.$rep_max, $niv+1 ); // récursivité - niveau suivant
}
elseif( $niv==$niv_nbr )
{
$result = $dir.'/'.$img_url; // résultat : 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
}
// -------------
}
};
// ----------------------------- |
Partager