Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154

    Script per leggere file di una cartella e mostrarli

    Ciao a tutti, ho fatto un piccolo script che mi legge i files da una cartella e li mostra sulla pagina ordinati per data.
    codice:
    <?
    	$open_handle=opendir('../news/archivio_news');
    	while ($news=readdir($open_handle)) {
    	if ($news=="." || $news==".." || $news==".DS_Store"){
    	continue;
    	}
    	$news_array[]=$news;
    	$filedate_array[]=date ("d/m/o", filemtime("../news/archivio_news/$news"));/*filectime("../leggi_news/$news");*/
    	$result = array_combine($filedate_array, $news_array);
    	krsort($result);
    	}
    	if ($news_array == "") {
    	echo "<h3>Non ci sono news presenti</h3>";
    	} else {
    	foreach ($result as $data => $titolo)  {
    	$titolo_news= str_replace(".php", "", $titolo);
    	preg_match("#_(.*)_#", $news, $ris);
    	echo "<div class=\"riga_elenco_news\">";
    	echo "<div class=\"elenca_titolo\">";
    	echo "
    
    <input name=\"file[]\" type=\"checkbox\" value=\"$titolo_news\" /><a href=\"../news/archivio_news/$titolo_news.php\" target=\"blank\">$titolo_news</a></p>";
    	echo "<p style=\"padding-top:5px;\">Pubblicata il: $data</p>";
    	echo "</div>";
    	echo "<div class=\"azioni_news\">";
    	echo "
    
    ";
    	echo "<a href=\"../news/archivio_news/$titolo_news.php\" target=\"blank\">&raquo;Vedi news</a>";
    	echo "<a href=\"modifica_news.php?news_to_modify=$titolo_news.php\" target=\"blank\">&raquo;Modifica news</a>";
    	echo "<a href=\"../news/archivio_news/$titolo_news.php\" target=\"blank\">&raquo;Cancella news</a>";
    	echo "</p>";
    	echo "</div>";
    	echo "<div style=\"clear:both;\"></div>";
    	echo "</div>";
    	}
    	}
    	closedir($open_handle);
    	?>
    Anzi DOVREBBE leggermi tutti i files visto che non lo fa e me ne legge solo uno. Non riesco proprio a capire dov'è l'errore. Grazie in anticipo per l'aiuto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154
    Credo che il problema sia qui
    codice:
    $news_array[]=$news;
    $filedate_array[]=date ("d/m/o", filemtime("../news/archivio_news/$news"));
    $result = array_combine($filedate_array, $news_array);
    krsort($result);
    La variabile $result, dove uso array_combine per unire i due array mi restituisce solo la prima chiave ed il primo valore dell'array. Perchè? Non dovrebbe associarmi tutti i chiavi e i valori? Grazie a chiunque vorrà aiutarmi.

  3. #3
    A me sembra funzionare, pero' array_combine e krsort perche' metterli dentro il ciclo? E' inutile eseguirli ogni volta, basta una alla fine. In realta' non serve neanche fare due array e combinarli, puoi creare direttamente result. Poi va considerato che due file potrebbero avere lo stesso mtime e quindi uno sovrascrivere l'altro (giacche' usi la data come chiave dell'array) ed inoltre la data in formato d/m/y non e' ordinabile.

  4. #4
    Esempio di come lo farei io (se ho capito bene il problema):

    Codice PHP:
    $base_dir '../news/archivio_news/';
    $dh       opendir($base_dir);
    $output   = array();

    while ( 
    $file readdir($dh) ) {
        if ( 
    $file == '.' || $file == '..' || $file == '.DS_Store' ) {
            continue;
        }
        
    $timestamp filemtime($base_dir $file);
        
    $output[] = array(
            
    'timestamp' => $timestamp,
            
    'data'      => date('d/m/Y'$timestamp),
            
    'titolo'    => str_replace('.php'''$file),
        );
    }

    usort($output'custom_date_sort');
    print_r($output);

    function 
    custom_date_sort($a$b) {
        
    $time_a $a['timestamp'];
        
    $time_b $b['timestamp'];

        if ( 
    $time_a == $time_b 
            return 
    0;
        return 
    $time_a $time_b ? -1;


  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154
    Grazie mille, il tuo aiuto mi è stato preziosissimo, mi hai fatto scoprire qual era il problema. Il fatto è che io avevo creato tanti file dentro la directory da leggere per provare lo script, ed avevano tutti lo stesso mtime come tu mi hai fatto notare. Ho quindi modificato così:
    codice:
    $filedate_array[]=date ("d/m/o g:i:s a", filemtime("../news/archivio_news/$news"));
    E funziona bene. Ti ringrazio per il tuo aiuto.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    154
    Aggiungendo anche i secondi ora legge tutti i files senza problemi. Ho anche tolto dal ciclo array_combine e la funzione di ordinamento come mi avevi fatto notare. Proverò anche la tua soluzione, che è sicuramente più raffinata della mia, visto che sono un principiante col php. Ti ringrazio di nuovo per l'aiuto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.