• User

    ordinare file per data

    ciao a tutti
    avrei un bisognino

    io ho una directory in cui vengono creati dei fil e di testo con questo formato:

    cliente-last-update-stock-05-06-2008---15-52-45.txt

    la prima serie di numeri è il giorno la seconda invece è l'ora

    i file nella directory li leggo così:
    [PHP]
    <?php
    if ($handle = opendir('/web/htdocs/dominio/home/caartella/')) {
    while (false !== ($file = readdir($handle)))
    {
    if ($file != "." && $file != "..") {
    echo "<a href="../cartella/$file" target="_blank">$file</a><br>\n";
    }
    }
    closedir($handle);
    }
    ?>
    [/PHP]

    Ora mi chiedevo cè un modo per stampare a video i file in ordine per ultima modifica??
    nel senso se un file è stato scritto il 24/07/2008 alle ore 16:09
    e uno è stato scritto il 24/07/2008 alle ore 16:15

    cè un modo con cui io posso scegliere l'ordine??

    spero di essermi spiegato

    vi ringrazio
    un saluto


  • User

    Prendi tutti i file in un array, parsi il nome dei file per ottenere da data e l'ora (con una regex magari), ne ricavi il timestamp, e fai un sort dell'array in base a quello.
    Purtroppo sto scappando e non ho tempo di fartelo..


  • User Attivo

    Io ti dico che la funzione per vedere l'ultima modifica dei file è filemtime() 😉

    :gthi:


  • User

    soluzione trovata

    [PHP]
    $arrayfile = Array();
    function ordina($file1,$file2)
    {
    $tempo1 = filectime($file1);
    $tempo2 = filectime($file2);
    return ($tempo1 < $tempo2) ? 1 : -1;
    }
    if ($handle = opendir('/web/htdocs/domain/home/customer/update_stock/'))
    {
    while (false !== ($file = readdir($handle)))
    {
    if ($file != "." && $file != "..") {
    $arrayfile[]='../customer/update_stock/'.$file;
    }
    }
    closedir($handle);
    usort($arrayfile,'ordina');
    //print_r($arrayfile);
    foreach($arrayfile as $txt)
    {
    echo "<a href="$txt" target="_blank">".str_replace("../customer/update_stock/","",$txt)."</a><br>\n";
    }
    }
    clearstatcache();
    [/PHP]


  • User

    @Jeeves said:

    Io ti dico che la funzione per vedere l'ultima modifica dei file è filemtime() 😉

    :gthi:Giusto, io ho erroneamente capito che doveva farlo a seconda della data scritta nel nome del file! 😄

    Ti scrivo il codice, punkrazio:
    Non è assolutamente la soluzione migliore, ma andavo di fretta e l'ho fatto nel primo modo che mi passava per la testa.. non ho potuto neanche testarlo, se non funziona dimmi che errori ti dà..
    [php]<?php
    $fl= array();
    $ft= array();
    if ($handle = opendir('/web/htdocs/dominio/home/caartella/')) {
    while (false !== ($file = readdir($handle)))
    {
    if ($file != "." && $file != "..") {
    $fl[] = array($file, filemtime('/web/htdocs/dominio/home/caartella/'.$file));
    }
    }
    closedir($handle);
    }

    A questo punto in $fa abbiamo tutti i file sottoforma di array (nomefile, ultima modifica)

    foreach ($fl as $t) {
    $tos[] = $t[1];
    }
    array_multisort($tos, SORT_DESC, $fl);

    Adesso, $fl è ordinato secondo la data di modifica.

    foreach ($fl as $t) {
    echo "<a href="../cartella/".$t[0]."" target="_blank">".$t[0]."</a><br>\n";
    }
    ?> [/php]EDIT: Tò, in ritardo. xD


  • User

    Ciao Trackback

    Interessante anche questo tutorial.

    Senti ma è possibile fare questa identica cosa

    però sui files di tutte le cartelle e sottocoartelle?

    Cioè la lista dei files di tutte le cartelle, ordinate per data di modifica?

    Ciao grazie


  • User

    nel caso volessi stampare nome, data e dimensione del file insieme? come potrei modificare?