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

Discussione in 'PHP' iniziata da master1986, 29 Marzo 2019.

  1. master1986

    master1986 Utente Attivo

    Registrato:
    8 Ottobre 2012
    Messaggi:
    228
    Mi Piace Ricevuti:
    0
    Punteggio:
    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.
     
  2. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    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 !
     
  3. master1986

    master1986 Utente Attivo

    Registrato:
    8 Ottobre 2012
    Messaggi:
    228
    Mi Piace Ricevuti:
    0
    Punteggio:
    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)
     
  4. master1986

    master1986 Utente Attivo

    Registrato:
    8 Ottobre 2012
    Messaggi:
    228
    Mi Piace Ricevuti:
    0
    Punteggio:
    16
    questa cosa qui non posso farla
     
  5. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    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...
    Sul tuo server non puoi creare un file txt e leggerlo con php?
     
  6. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    La persistenza vincola il programmatore ad un DB / DB flat etc.... COME CREI UNA VARIABILE DAL NULLA SENZA PERSISTENZA DEL DATO?
     
  7. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.577
    Mi Piace Ricevuti:
    128
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    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($dirSCANDIR_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 ….
     
  8. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    Non credo servisse la memorizzazione.....
    Credo voglia il recupero dell'ultimo elemento caricato...
    Infatti:
    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!
     
  9. master1986

    master1986 Utente Attivo

    Registrato:
    8 Ottobre 2012
    Messaggi:
    228
    Mi Piace Ricevuti:
    0
    Punteggio:
    16

    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
     
  10. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    Hai ragione @marino51 ho sbagliato, nessuno è perfetto....

    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...

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

    Files Allegati:

    Ultima modifica: 30 Marzo 2019
  11. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.577
    Mi Piace Ricevuti:
    128
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    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($dirSCANDIR_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: 30 Marzo 2019
  12. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    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...
     
  13. master1986

    master1986 Utente Attivo

    Registrato:
    8 Ottobre 2012
    Messaggi:
    228
    Mi Piace Ricevuti:
    0
    Punteggio:
    16

    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?
     
  14. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    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!
     
  15. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    1.008
    Mi Piace Ricevuti:
    57
    Punteggio:
    48
    Sesso:
    Maschio
    Occupazione:
    Dev Full Stack
    Località:
    IT/SW
    Vabbè vabbè @marino51, come al solito...

    Pensa a fare buon weekend, che a parlare ci pensano i codici, scritti bene e non...
     
  16. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.577
    Mi Piace Ricevuti:
    128
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    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($dirSCANDIR_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: 31 Marzo 2019
Sto caricando...

Condividi questa Pagina