recording sur programme
This commit is contained in:
5
.theia/settings.json
Normal file
5
.theia/settings.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"[php]": {
|
||||||
|
"editor.defaultFormatter": "fterrag.vscode-php-cs-fixer"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,223 +1,115 @@
|
|||||||
#!/usr/bin/php
|
#!/usr/bin/php
|
||||||
<?PHP
|
<?php
|
||||||
|
|
||||||
$log_directory = getenv('HOME') . '/logs';
|
$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)) {
|
// Vérification et création du répertoire de journalisation
|
||||||
system("mkdir -p $log_directory");
|
if (!is_dir($log_directory)) {
|
||||||
|
mkdir($log_directory, 0777, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_dir($log_directory) || !is_writable($log_directory)) {
|
if (!is_writable($log_directory)) {
|
||||||
die("Impossible d'accéder au répertoire de journalisation : $log_directory");
|
die("Impossible d'accéder au répertoire de journalisation : $log_directory\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$timestamp = date('YmdHis');
|
||||||
|
$file_log = "$log_directory/trierPhotos_$timestamp.log";
|
||||||
|
$file_undo = "$log_directory/trierPhotos_$timestamp" . "_undo.log";
|
||||||
|
|
||||||
$file_log_out_str = $log_directory . '/trierPhotos_'.date('YmdHis').'.log';
|
function logMessage($file, $message) {
|
||||||
$file_undo_str = $log_directory . '/tirerPhotos_'.date('YmdHis').'_undo.log';
|
file_put_contents($file, $message . "\n", FILE_APPEND);
|
||||||
|
echo $message . "\n";
|
||||||
|
}
|
||||||
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);
|
|
||||||
|
|
||||||
|
logMessage($file_log, "Début du script : " . date("c"));
|
||||||
|
logMessage($file_log, "Lieu d'exécution : " . getcwd());
|
||||||
|
|
||||||
if ($handle = opendir('.')) {
|
if ($handle = opendir('.')) {
|
||||||
|
while (($entry = readdir($handle)) !== false) {
|
||||||
|
if ($entry === '.' || $entry === '..') continue;
|
||||||
|
|
||||||
|
$mime_type = explode("/", mime_content_type($entry));
|
||||||
|
logMessage($file_log, "\nFichier détecté : $entry");
|
||||||
|
logMessage($file_log, "MIME type : {$mime_type[0]}");
|
||||||
|
|
||||||
while (false !== ($entry = readdir($handle))) {
|
$traitement_ok = in_array($mime_type[0], ['image', 'video']);
|
||||||
|
$dateTimeOriginal = null;
|
||||||
// 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];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Lecture des métadonnées EXIF
|
||||||
|
if ($traitement_ok && $mime_type[0] === 'image' && $mime_type[1] === 'jpeg') {
|
||||||
// Création des dossiers et déplacement du fichier
|
$file_exif = @exif_read_data($entry, 'EXIF');
|
||||||
if ($traitement_ok && isset($dateTimeOriginal) && is_array($dateTimeOriginal)) {
|
if (!empty($file_exif['DateTimeOriginal'])) {
|
||||||
|
$date_exif = explode(':', str_replace(' ', ':', $file_exif['DateTimeOriginal']));
|
||||||
// TRIER PAR DATE
|
$dateTimeOriginal = [
|
||||||
|
'y' => $date_exif[0],
|
||||||
$rep_dest = $dateTimeOriginal['y'] ."/". $dateTimeOriginal['m'] ."/". $dateTimeOriginal['d'];
|
'm' => $date_exif[1],
|
||||||
|
'd' => $date_exif[2]
|
||||||
// TRIER PAR APPAREIL
|
];
|
||||||
/*
|
logMessage($file_log, "EXIF DateTimeOriginal : {$file_exif['DateTimeOriginal']}");
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Détection via le nom du fichier
|
||||||
|
if (!$dateTimeOriginal) {
|
||||||
|
if (preg_match('/^(IMG-|VID_|IMG_|VID-)(\d{4})(\d{2})(\d{2})/', $entry, $matches)) {
|
||||||
|
$dateTimeOriginal = [
|
||||||
|
'y' => $matches[2],
|
||||||
|
'm' => $matches[3],
|
||||||
|
'd' => $matches[4]
|
||||||
|
];
|
||||||
|
logMessage($file_log, "Date extraite du nom de fichier.");
|
||||||
|
} elseif (preg_match('/^Screenshot_(\d{4})(\d{2})(\d{2})/', $entry, $matches)) {
|
||||||
|
$dateTimeOriginal = [
|
||||||
|
'y' => $matches[1],
|
||||||
|
'm' => $matches[2],
|
||||||
|
'd' => $matches[3]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vérification et correction des dates
|
||||||
|
if ($dateTimeOriginal) {
|
||||||
|
if ($dateTimeOriginal['m'] < 1 || $dateTimeOriginal['m'] > 12 ||
|
||||||
|
$dateTimeOriginal['d'] < 1 || $dateTimeOriginal['d'] > 31 ||
|
||||||
|
$dateTimeOriginal['y'] < 1900 || $dateTimeOriginal['y'] > date('Y')) {
|
||||||
|
$dateTimeOriginal = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Utilisation de la date de modification si aucune autre date trouvée
|
||||||
|
if (!$dateTimeOriginal) {
|
||||||
|
$date_modif = explode(':', date('Y:m:d', filemtime($entry)));
|
||||||
|
$dateTimeOriginal = [
|
||||||
|
'y' => $date_modif[0],
|
||||||
|
'm' => $date_modif[1],
|
||||||
|
'd' => $date_modif[2]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Création du dossier de destination et déplacement
|
||||||
|
if ($dateTimeOriginal) {
|
||||||
|
$rep_dest = "{$dateTimeOriginal['y']}/{$dateTimeOriginal['m']}/{$dateTimeOriginal['d']}";
|
||||||
|
if (!is_dir($rep_dest)) {
|
||||||
|
mkdir($rep_dest, 0777, true);
|
||||||
|
logMessage($file_log, "Dossier créé : $rep_dest");
|
||||||
|
}
|
||||||
|
|
||||||
|
$file_dest = "$rep_dest/$entry";
|
||||||
|
if (!file_exists($file_dest)) {
|
||||||
|
rename($entry, $file_dest);
|
||||||
|
logMessage($file_log, "Déplacé vers : $file_dest");
|
||||||
|
file_put_contents($file_undo, "mv \"$file_dest\" \"$entry\"\n", FILE_APPEND);
|
||||||
|
} else {
|
||||||
|
$md5_src = md5_file($entry);
|
||||||
|
$md5_dst = md5_file($file_dest);
|
||||||
|
if ($md5_src === $md5_dst) {
|
||||||
|
unlink($entry);
|
||||||
|
logMessage($file_log, "[ERREUR] Doublon détecté et supprimé : $file_dest");
|
||||||
|
} else {
|
||||||
|
logMessage($file_log, "[ERREUR] Conflit de fichier : $file_dest existe déjà mais avec un contenu différent.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
closedir($handle);
|
closedir($handle);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user