[PHP] Cercare l'ultima immagine caricata in una cartella datata

master1986

Utente Attivo
8 Ott 2012
234
0
16
Buon pomeriggio a tutti, dal titolo la cosa sembra un pò strana, ma cerco di spiegarmi meglio.
Ho una telecamera che ogni 5 minuti scatta una foto e la carica sul mio indirizzo ftp. La telecamera inoltre mi genera sottocartelle per archiviare le immagini, tipo : anno/mese/giorno.

Quello che mi servirebbe è di creare uno script per sapere l'ultimo file caricato nella cartella giornaliera dalla telecamera. Inoltre lo script deve tener conto che dopo la mezzanotte cambia l'orario, quindi dovrà puntare sempre su anno/mese/giorno

La mia struttura è la seguente:

www.miosito.it/telecamera/archivio/anno/mese/giorno

Lo script dovrà stare in telecamera e dovrà leggere come detto sopra l'ultima immagine contenuta nell'archivio. Io attualmente ho questa situazione:

www.miosito.it/telecamera/archivio/2019/03/29

Nella cartella "29" tengo questi file:

telecamera_201903291610.jpg
telecamera_201903291615.jpg
telecamera_201903291620.jpg
telecamera_201903291625.jpg
telecamera_201903291630.jpg

e così di seguito, ovviamente dopo la mezzanotte la telemera crea una nuova cartella. Lo script non dovrà far altro che farmi visualizzare l'ultimo file caricato. Tale nome lo utilizzerò per richiamare l'immagine in un altro script che mi occorre.


Vi ringrazio anticipatamente.
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Lo script dovrà stare in telecamera e dovrà leggere come detto sopra l'ultima immagine contenuta nell'archivio. Io attualmente ho questa situazione:
Dipende da come vuoi gestire il tutto, la parte più semplice visto la richiesta sarebbe aggiungere un file nella root/telecamera tipo:
tuosito.it/telecamera/last.txt
dove viene inserito il percorso dell'ultimo elemento creato...
tipo:
archivio/Y/m/d/file.ext

Quindi in questo scenario la camera come prenderà direttamente il percorso dell'ultima dell'immagine !
 

master1986

Utente Attivo
8 Ott 2012
234
0
16
Ciao, e se io volessi conoscere l'ultimo file inserito nella directory 29 (cartella che trae la data da oggi), poi sarà sufficiente sfruttare ora, data e anno del server per entrare nella directory ogni giorno. Più che file.txt a me servirebbe generare una vera e propria variabile, tipo echo $ultimo_file_inserito.jpg (ovviamente avrà il nome dell'ultima foto)
 

master1986

Utente Attivo
8 Ott 2012
234
0
16
Dipende da come vuoi gestire il tutto, la parte più semplice visto la richiesta sarebbe aggiungere un file nella root/telecamera tipo:
tuosito.it/telecamera/last.txt
dove viene inserito il percorso dell'ultimo elemento creato...
tipo:
archivio/Y/m/d/file.ext

Quindi in questo scenario la camera come prenderà direttamente il percorso dell'ultima dell'immagine !

questa cosa qui non posso farla
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
come ti metti con la gestione di date diverse se non menzionate?
Un server a Roma e un server a New York se non settata correttamente la TIME_ZONE avranno due date diverse, quindi a mezzanotte potresti avere un risultato diverso rispetto a quello reale...
Creando "l'indice" dell'ultimo file creato hai sempre e soprattutto a prescindere dalla data dei vari server l'ultimo elemento creato...
questa cosa qui non posso farla
Sul tuo server non puoi creare un file txt e leggerlo con php?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
fatta salva la coerenza delle info contenute nelle cartelle,
upload_2019-3-29_19-52-54.png


userei questo script
PHP:
<?php
$dir = "telecamera/archivio";
$dir = newestFile($dir);  // anno
$dir = newestFile($dir);  // mese
$dir = newestFile($dir);  // giorno
$pic = newestFile($dir);  // immagine

function newestFile($dir) {
$files = scandir($dir, SCANDIR_SORT_DESCENDING);
$name  = $dir . "/" . $files[0];
echo $name . "<br />";
return $name;
}
?>
con questo risultato
upload_2019-3-29_19-54-38.png


ma mi sembra troppo semplice ….
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
ma mi sembra troppo semplice ….
Non credo servisse la memorizzazione.....
Quello che mi servirebbe è di creare uno script per sapere l'ultimo file caricato nella cartella giornaliera dalla telecamera
Credo voglia il recupero dell'ultimo elemento caricato...
Infatti:
La persistenza vincola il programmatore ad un DB / DB flat etc.... COME CREI UNA VARIABILE DAL NULLA SENZA PERSISTENZA DEL DATO?
Che stando sotto directory a patto che non si faccia "RecursiveDirectoryIterator" e verifica del "filemtime" per il recupero dell'ultimo recuperato (quindi operazione onerosa e inutile), o si utilizza un DB o un file con l'ultimo elemento creato...

Credo!
 

master1986

Utente Attivo
8 Ott 2012
234
0
16
@macus_adi
ho difficoltà a capire quello che scrivi, ma,
Vedi l'allegato 6219
PHP:
<?php
$dir = "telecamera/archivio";
$dir = newestFile($dir);  // anno
$dir = newestFile($dir);  // mese
$dir = newestFile($dir);  // giorno
$pic = newestFile($dir);  // immagine

echo "<br />immagine scelta : " . $pic;

function newestFile($dir) {
$files = scandir($dir, SCANDIR_SORT_DESCENDING);
$name  = $dir . "/" . $files[0];
// echo $name . "<br />";
return $name;
}
?>
ancora semplice …..
altre considerazioni inutili ...


Grazie mille era quello che cercavo. Proprio così, però una cosa vorrei: ottenere solo il nome dell'immagine senza la directory stampata tipo:

telecamera_201903291615.jpg
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
@macus_adi
ho difficoltà a capire quello che scrivi, ma,
Hai ragione @marino51 ho sbagliato, nessuno è perfetto....

altre considerazioni inutili ...
Nulla di personale (non è una faida, controlla quanto dirò e parliamo in modo pacifico), il tuo "ancora troppo facile" funziona malino ed è inconsistente, se aggiungessi un file in una directory preesistente questa non viene letta in modo coerente, ergo lo script seppur funziona con i meccanismi di time() non è completamente autonomo.
Es. pratico: Togliendo 1 sola profondità delle directory quindi immagina di non avere la dir "ANNO", tu punteresti sempre al mese 12, per non parlare delle risorse impiegate ed al tempo intercorso per effettuare l'ordinamento...

Il calcolo lo fai al volo:
1 foto ogni 5 minuti = 12 foto ogni ora * 24 = 288 * 30 giorni (diciamo) = 8640 foto al mese
mettiamo 2 anni = 8640 *24 = 207360
Prova con semplici file txt, poi fammi sapere...
Per completezza ti allego uno zip per effettuare delle "provole", alla fine dell'esecuzione dello script avrai 2 output:
1- Frutto del tuo script sopra, con calcolo temporale
2- Frutto dell'ottimizzazione in base alla posizione dell'ultimo file attraverso un semplice file txt con calcolo temporale
Naturalmente la prima esecuzione dello script prevede la generazione e la creazione dell'indice nel file txt...

Allego immagine con differenza di risultato e tempo d'esecuzione sui soli primi 3 mesi 2019, la differenza dei risultati è data dalla generazione dei file senza ordine per rendere lo script autonomo in ogni situazione e ad ogni profondità prendendo esattamente l'ultimo file creato...

telecamera_201903291615.jpg
PHP:
$a=explode('/',$file);
echo array_pop($a);
 

Allegati

  • test_telecamera.zip
    3,8 KB · Visite: 359
  • sabato 30 marzo.png
    sabato 30 marzo.png
    11,3 KB · Visite: 342
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
PHP:
<?php
$dir = "telecamera/archivio";
$dir = newestFile($dir);  // anno
$dir = newestFile($dir);  // mese
$dir = newestFile($dir);  // giorno
$pic = newestFile($dir);  // immagine

echo "<br />immagine scelta : " . $pic;
echo "<br />immagine scelta : " . $files[0];

function newestFile($dir) {
global $files;
$files = scandir($dir, SCANDIR_SORT_DESCENDING);
$name  = $dir . "/" . $files[0];
// echo $name . "<br />";
return $name;
}
?>

risultato
upload_2019-3-30_9-33-38.png


Ricorda sempre, che la struttura delle cartelle deve essere coerente
(cartella anno - cartella mese - cartella giorno - files della telecamera)
con questa premessa lo script si adatta alla situazione senza richiedere "manutenzione"
 
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
Ricorda sempre, che la struttura delle cartelle deve essere coerente
Vero... ma ogni volta crei l'indice e ricalcoli il tutto?
Con file ordinati la diff è mostrata in foto....
Risultati coincidenti, con un sensibile tempo d'esecuzione differente!
Buon Sabato!
test_order.png


La foto mostra l'esecuzione dello script sopra, ed i tempi possono variare da macchina a macchina...
 

master1986

Utente Attivo
8 Ott 2012
234
0
16
PHP:
<?php
$dir = "telecamera/archivio";
$dir = newestFile($dir);  // anno
$dir = newestFile($dir);  // mese
$dir = newestFile($dir);  // giorno
$pic = newestFile($dir);  // immagine

echo "<br />immagine scelta : " . $pic;
echo "<br />immagine scelta : " . $files[0];

function newestFile($dir) {
global $files;
$files = scandir($dir, SCANDIR_SORT_DESCENDING);
$name  = $dir . "/" . $files[0];
// echo $name . "<br />";
return $name;
}
?>

risultato
Vedi l'allegato 6222

Ricorda sempre, che la struttura delle cartelle deve essere coerente
(cartella anno - cartella mese - cartella giorno - files della telecamera)
con questa premessa lo script si adatta alla situazione senza richiedere "manutenzione"


Funziona alla grande! Era proprio quello che volevo grazie mille Marino!

Una cosa vorrei chiederti, ora che ho localizzato l'ultimo file, posso stamparlo a video con la libreria gd, in modo da poterci mettere su alcune scritte ecc, la conosco abbastanza la libreria. Ho la necessità di richiamare il file però.

Cosa mi consigli?
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
buon sabato anche a te e consolati con i tuoi numeri (casuali)
Marino Marino.... Alcuni dubbi mi sono venuti, e in taluni casi ho constatato che...

Esegui il codice, non sparare a vanvera, consolati con me e i miei numeri casuali... che tanto cansuali non sono....
run.png

La prova la fai al volo....
e moltiplica x1000 i valori, poi ne riparliamo (cmq i numeri casuali toglili se mandano in confusione)...
Buon Sabato!
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Funziona alla grande! Era proprio quello che volevo grazie mille Marino!

Una cosa vorrei chiederti, ora che ho localizzato l'ultimo file, posso stamparlo a video con la libreria gd, in modo da poterci mettere su alcune scritte ecc, la conosco abbastanza la libreria. Ho la necessità di richiamare il file però.

Cosa mi consigli?
ho preso l'esempio dal manuale php, lo script diventa
PHP:
<?php
$workTime = - microtime(true);

$dir = "telecamera/archivio";
$dir = newestFile($dir);  // anno
$dir = newestFile($dir);  // mese
$dir = newestFile($dir);  // giorno
$pic = newestFile($dir);  // immagine

$workTime += microtime(true);

/*
echo "<br />immagine scelta : " . $pic;
echo "<br />immagine scelta : " . $files[0];
echo "<br />time spent : " . ( 1000 * $workTime ) . " milliseconds<br /><br />";
echo "<img src=".$pic.">";
*/

header('Content-Type: image/jpeg');
$img = imagecreatefromjpeg($pic);
imagejpeg($img);
imagedestroy($img);

function newestFile($dir) {
    global $files;
    $files = scandir($dir, SCANDIR_SORT_DESCENDING);
    $name  = $dir . "/" . $files[0];
    // echo $name . "<br />";
    return $name;
}
?>

ho passato alla funzione il nome del file completo del percorso, perché credo che nella tua applicazione il percorso possa essere differente
ho caricato una foto ed il browser la visualizza bene
upload_2019-3-30_20-39-7.png

attribuendo la proprietà del disegno ai figli dei carrugi di Albenga
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
F [PHP] Cercare voci uguali nel db e unire alcune variabili PHP 0
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3

Discussioni simili