Elenco dei link del file presenti in una cartella

di il
2 risposte

Elenco dei link del file presenti in una cartella

<?php
# Questa funzione permette di visualizzare un elenco a albero dei file e delle sottocartelle contenuti in $base.
# Ciascun nome visualizzato è un link al file.
# Copyright: Isacco Coccato 

# NOTE:
# - Quando si specifica il percorso, NON mettere / alla fine.
# - Le immagini dei file e delle cartelle devono essere nella directory foto/

function elenco_dir($base)
{
$dir_vuota=1; # Flag per il controllo della directory vuota
if ($handle_dir = opendir($base)) # Apre la directory, e verifica che il percorso sia corretto
{
    echo "<ul class=\"testo\">\n"; 
  while (false!==($dir = readdir($handle_dir))) # Legge una voce del finchè non è finita la directory, e la memorizza in $dir
  {
    if ($dir!="." && $dir!="..") #Evita di stampare "." e ".."
    {
      $dir_vuota=0;
          if(is_dir($base. "/" .$dir))
          {
           # Codice nel caso di directory
          echo '<li style="list-style-image: url(foto/cartella.gif)"><b>' . $dir . "</b>\n";
          elenco_dir($base. "/" .$dir); 
               echo "</li>\n";
      }
       else
        {
          #Codice nel caso di file
            # Evita di stampare alcuni tipi di file
                # Elimina l'estensione dei file, qualunque sia la sua lunghezza, e anche se compaiono altri punti nel nome del file
              if ($dir != "." && $dir != ".." && $dir != "file_da_non_mostrare.est" && substr($dir,-3,3) != "estensione_da_non_mostrare")
        {
                   echo '<li style="list-style-image: url(foto/file.gif)"><a href="' .$base . '/' . $dir . '">' . str_replace('_', ' ', substr($dir,0, strrpos($dir,"."))) . "</a></li>\n";
              }
      }
    }
  }
    if ($dir_vuota==1) echo '<li class="testo" style="list-style-image: url(foto/sbagliato.gif)">Nessun file presente</li>';    
  echo "</UL><BR>";    
  closedir($handle_dir);
}
else #Codice nel caso di percorso non trovato
{
  echo "Percorso errato";
}
}    

# Chiamata della funzione come esempio
elenco_dir(".");
?>
ho messo questo codice php per ottenere elenco dei link del file presenti in una cartella. Non riesco a fare in modo che compaiano solo i link di file html. Mi potete aiutare?

2 Risposte

  • Re: Elenco dei link del file presenti in una cartella

    Dovrei anche invertire l'ordine dei file ma non riesco essendo un neofita del php ed avendo scopiazzato questo codice. Grazie a chi potrà aiutarmi.
  • Re: Elenco dei link del file presenti in una cartella

    Ho modificato leggermente il tuo codice per fargli fare quello che chiedi, ma è difficile spiegarti se non capisci il codice o non sai come modificarlo. In pratica ti ho messo la possibilità di definire una lista di estensioni che vuoi visualizzare dalle cartelle/sottocartelle della directory che scegli come base.
    Le directory vengono stampate tutte, anche se non contengono nessun file di quelli che tu chiedi, perciò devi valutare se questo è un effetto che vuoi ottenere o se devi modificare la logica del programma.
    Ho aggiunto qualche commento per aiutarti a capire il flusso. Non mi è chiaro cosa in tendo quando dici "devo invertire l'ordine dei file".
    Fammi sapere se riesci a usarlo.
    Ciao,
    Rob
    
    <?php
    # Questa funzione permette di visualizzare un elenco a albero dei file e delle sottocartelle contenuti in $base.
    # Ciascun nome visualizzato è un link al file.
    # Copyright: Isacco Coccato 
    
    # NOTE:
    # - Quando si specifica il percorso, NON mettere / alla fine.
    # - Le immagini dei file e delle cartelle devono essere nella directory foto/
    
    function elenco_dir($base, $included_extensions = [])
    {
    	$dir_vuota = 1;	# Flag per il controllo della directory vuota
    	if ($handle_dir = opendir($base))	# Apre la directory, e verifica che il percorso sia corretto
    	{
    		echo "<ul class=\"testo\">\n"; 
    		while (false !== ($dir = readdir($handle_dir)))	# Legge una voce del finchè non è finita la directory, e la memorizza in $dir
    		{
    			if ($dir != "." && $dir != "..")		#Evita di stampare "." e ".."
    			{
    				$dir_vuota = 0;
    				if(is_dir($base . "/" . $dir))
    				{
    					# Codice nel caso di directory
    					echo '<li style="list-style-image: url(foto/cartella.gif)"><b>' . $dir . "</b>\n";
    					elenco_dir($base . "/" . $dir); 
    					echo "</li>\n";
    				}
    				else {
    					# Codice nel caso di file
    					# Evita di stampare alcuni tipi di file
    					# Elimina l'estensione dei file, qualunque sia la sua lunghezza, e anche se compaiono altri punti nel nome del file
    					if ($dir != "." && $dir != "..")
    					{
    						$file_extension = pathinfo($dir, PATHINFO_EXTENSION);	# estrae l'estensione del file
    						# se è stata passata una lista di estensioni e quella in esame è nella lista, crea il link
    						if (!empty($included_extensions) && in_array($file_extension, $included_extensions))
    						{
    							echo '<li style="list-style-image: url(foto/file.gif)"><a href="' . $base . '/' . $dir . '">' . str_replace('_', ' ', substr($dir, 0, strrpos($dir, "."))) . "</a></li><br />";
    						}
    					}
    				}
    			}
    		}
    		if ($dir_vuota == 1)
    		{
    			echo '<li class="testo" style="list-style-image: url(foto/sbagliato.gif)">Nessun file presente</li>';
    		}
    		echo "</ul><br />";
    		closedir($handle_dir);
    	}
    	else #Codice nel caso di percorso non trovato
    	{
    		echo "Percorso errato";
    	}
    }    
    
    /**
     * Chiamata della funzione come esempio
     *
     * example usage:
     *	elenco_dir("pippo"); 					# tutti i file (inteso come tutte le estensioni) del folder "pippo" saranno visualizzati
     *	elenco_dir("../pluto", []); 			# idem come sopra
     *	elenco_dir("qui/quo/qua/", ["html"]);	# solo i file html della cartella "qui/quo/qua" saranno visualizzati
     *
     * @param  string	nome della cartella di partenza (tutti i folder interni verranno esaminati)
     * @param  array	elenco di estensioni che si vogliono visualizzare (anche una sola) - nessuna = tutte le estensioni
     * @return void
    **/
    elenco_dir("../../testfolder/", ["php"]);	// in questo caso solo i file "php" della cartella "testfolder" saranno visualizzati
    
Devi accedere o registrarti per scrivere nel forum
2 risposte