ajout du script trierPhotos.php

This commit is contained in:
2025-03-16 23:34:26 +01:00
parent 4ac5f3c2e2
commit 4a57ffccf2

223
local/bin/trierPhotos.php Executable file
View File

@@ -0,0 +1,223 @@
#!/usr/bin/php
<?PHP
$log_directory = getenv('HOME') . '/logs';
// vérifier que le répertoire de journalisation existe et qu'il est accessible en écriture
if (!is_dir($log_directory) || !is_writable($log_directory)) {
system("mkdir -p $log_directory");
}
if (!is_dir($log_directory) || !is_writable($log_directory)) {
die("Impossible d'accéder au répertoire de journalisation : $log_directory");
}
$file_log_out_str = $log_directory . '/trierPhotos_'.date('YmdHis').'.log';
$file_undo_str = $log_directory . '/tirerPhotos_'.date('YmdHis').'_undo.log';
file_put_contents($file_log_out_str, 'Debut du script : ' . date("c") . "\n" , FILE_APPEND);
file_put_contents($file_log_out_str, 'Lieux d\'execution : ' . getcwd() . "\n", FILE_APPEND);
if ($handle = opendir('.')) {
while (false !== ($entry = readdir($handle))) {
// initialisation des variables
unset($mime_type);
unset($file_exif);
unset($dateTimeOriginal);
unset($dateTimeOriginal_explode);
$traitement_ok = false;
$message = "";
$undoCmd = "";
$file_img_ok = false;
$file_vid_ok = false;
$file_exif_ok = false;
$file_nameimg_ok = false;
$file_namevid_ok = false;
$file_date_ok = false;
if ($entry != "." && $entry != "..") {
// Nom du fichier
/**
if (file_exists($entry)) {
return true;
} else {
return false;
}
*/
file_put_contents($file_log_out_str, "\n Entrée lue : : " . $entry . "\n", FILE_APPEND);
// Détection du fichier par son type mime
// Lecture du type de fichier
$mime_type = explode("/", mime_content_type($entry));
file_put_contents($file_log_out_str, "MIME type : '" . $mime_type[0] . "'\n", FILE_APPEND);
// Traitement autorisé
if ($mime_type[0]=="video" || $mime_type[0]=="image") {
$traitement_ok = true;
}
// Si echec précédent, alors détection du fichier par son extension
if ($traitement_ok) {
//$traitement_ok = true;
$extension = pathinfo($entry, PATHINFO_EXTENSION);
file_put_contents($file_log_out_str, "Extension : '" . $extension . "'\n", FILE_APPEND);
}
// Lecture de l'EXIF
if ($mime_type[0]=="image" && $mime_type[1]=="jpeg") {
$file_exif = exif_read_data($entry, 'EXIF');
}
// Récupération de la date originale depuis EXIF
if ($traitement_ok && !isset($dateTimeOriginal)) {
if (isset($file_exif) && is_array($file_exif) && array_key_exists('DateTimeOriginal', $file_exif)) {
$dateTimeOriginal_explode = explode(":", $file_exif['DateTimeOriginal']);
if (isset($dateTimeOriginal_explode)) {
$dateTimeOriginal['y'] = $dateTimeOriginal_explode[0];
$dateTimeOriginal['m'] = $dateTimeOriginal_explode[1];
$dateTimeOriginal['d'] = explode(" ", $dateTimeOriginal_explode[2])[0];
}
//print_r(array_keys($file_exif)); // DEBUG
file_put_contents($file_log_out_str, "EXIF : '" . $file_exif['DateTimeOriginal'] . "'\n", FILE_APPEND);
}
}
// Lecture du nom du fichier
if ($traitement_ok && !isset($dateTimeOriginal)) {
// Vérification de la structure du nom
if ( (substr($entry,0,4)=="IMG-") || (substr($entry,0,4)=="VID_") ||
(substr($entry,0,4)=="IMG_") || (substr($entry,0,4)=="VID-") )
{
$dateTimeOriginal['y']=substr($entry,4,4);
$dateTimeOriginal['m']=substr($entry,8,2);
$dateTimeOriginal['d']=substr($entry,10,2);
}
if ( (substr($entry,0,11)=="Screenshot_") )
{
$dateTimeOriginal['y']=substr($entry,11,4);
$dateTimeOriginal['m']=substr($entry,15,2);
$dateTimeOriginal['d']=substr($entry,17,2);
}
file_put_contents($file_log_out_str, "EXIF : Traitement sur nom du fichier.\n", FILE_APPEND);
}
// Vérification des dates récupérées
if ($traitement_ok &&
isset($dateTimeOriginal) && is_array($dateTimeOriginal)) {
if (isset($dateTimeOriginal) && is_array($dateTimeOriginal) && ($dateTimeOriginal['m'] < 01 || $dateTimeOriginal['m'] >12)) {
unset($dateTimeOriginal);
}
if (isset($dateTimeOriginal) && is_array($dateTimeOriginal) && ($dateTimeOriginal['d'] < 01 || $dateTimeOriginal['d'] >31)) {
unset($dateTimeOriginal);
}
if (isset($dateTimeOriginal) && is_array($dateTimeOriginal) && ($dateTimeOriginal['y'] < 1900 || $dateTimeOriginal['d'] >2021)) {
unset($dateTimeOriginal);
}
}
// Récupération de la date de modification
if ($traitement_ok && !isset($dateTimeOriginal)) {
$dateTimeOriginal_explode = explode(":", date("Y:m:d", filemtime($entry)));
if (isset($dateTimeOriginal_explode)) {
$dateTimeOriginal['y'] = $dateTimeOriginal_explode[0];
$dateTimeOriginal['m'] = $dateTimeOriginal_explode[1];
$dateTimeOriginal['d'] = $dateTimeOriginal_explode[2];
}
}
// Création des dossiers et déplacement du fichier
if ($traitement_ok && isset($dateTimeOriginal) && is_array($dateTimeOriginal)) {
// TRIER PAR DATE
$rep_dest = $dateTimeOriginal['y'] ."/". $dateTimeOriginal['m'] ."/". $dateTimeOriginal['d'];
// TRIER PAR APPAREIL
/*
if (isset($file_exif) && is_array($file_exif) &&
array_key_exists('Make', $file_exif) &&
$file_exif['Make'] !== null ) {
$rep_dest = $file_exif['Make'];
}
if (isset($file_exif) && is_array($file_exif) && array_key_exists('Model', $file_exif)) {
$rep_dest .= '-' . $file_exif['Model'];
}
if (isset($file_exif) && is_array($file_exif) && array_key_exists('InternalSerialNumber', $file_exif) &&
$file_exif['InternalSerialNumber'] !== null ) {
$rep_dest .= '-'.$file_exif['InternalSerialNumber'];
}
*/
// TRAITEMENT COMMUN
// Création du dossier destination
if (!empty($rep_dest)) {
$rep_dest = str_replace("\0", '', $rep_dest);
}
if (!file_exists($rep_dest)) {
// Vérifie et nettoie la chaîne de caractères null
if (!empty($rep_dest)) {
if (mkdir($rep_dest, 0777, true)) {
echo $rep_dest . " créé.\n";
} else {
die('Echec lors de la création des répertoires...'."\n");
}
}
}
// Déplacement
$file_dest = $rep_dest."/".$entry;
if (!file_exists($file_dest)) {
rename($entry, $file_dest);
$undoCmd .= "mv \"".$file_dest."\" \"".$entry."\"\n";
$message .= " => ".$file_dest."\n";
} else {
$md5_file_src = md5_file($entry);
$md5_file_dst = md5_file($file_dest);
if ($md5_file_src == $md5_file_dst) {
$message .= " [ERREUR] ".$file_dest." existe déjà ! Destruction car même empreinte $md5_file_src / $md5_file_dst\n";
unlink($entry);
} else {
$message .= " [ERREUR] ".$file_dest." existe déjà ! Mais pas avec la même empreinte.\n";
}
}
// Ecriture du log
file_put_contents($file_undo_str, $undoCmd, FILE_APPEND);
file_put_contents($file_log_out_str, $message, FILE_APPEND);
echo $message;
}
}
}
closedir($handle);
}