Navigare fra le directory e aprire file

device75it

Nuovo Utente
25 Nov 2014
4
0
0
Salve a tutti sono da 10 anni che non uso php e mi sono alquanto arruginito.
Vengo al dunque ho una serie di cartelle con piu livelli , ovverò le cartelle contengono altre cartelle o solo file che nel caso ci siano verranno aperti.
es: root
|
-----------------------
| | |
pippo pluto (p.html , p1.pdf, ecc)
| |
(p.html,ecc) (altra cartella)

Ho fatto questa parte di codice che mi vede la directory corrente ma vorrei renderla dinamica, e tra l'altro se ho solo file come faccio ad assegnarli il link a $value per aprirli :

PHP:
<?php

// percorso della directory da leggere
$directory = "NOME DELLA DIRECTORY";

$d = dir($directory);

$d->close();

//leggo la directory
  $dirs= array();
  $files = array();
  if ($handle = opendir("./" . $directory))
  {
    while ($file = readdir($handle))
    {
      if (is_dir("./{$directory}/{$file}"))
      {
        if ($file != "." & $file != "..") $dirs[] = $file;
      }
      else
      {
        if ($file != "." & $file != "..") $files[] = $file;
      }
    }
  }
  closedir($handle);

//ordina file e cartelle
  reset($dirs);
  sort($dirs);
  reset($dirs);

  reset($dirs);
  sort($dirs);
  reset($dirs);
//key=indice  val=nome directory
  echo "<strong>Cartelle:</strong>\n<ul>";
  while(list($key, $value) = each($dirs))
  { 
	  $d++;
    echo "<li><a href=\"{$value}\">{$value}/</a>\n";
	  }

?>

Spero che qualcuno riesca a darmi una dritta,

Grazie sin da ora
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
se non ho capito male il problema potresti provare con lo schema seguente
PHP:
<?php 
$cart_1=glob("*",GLOB_ONLYDIR);//trova le cartelle di primo livello della root
foreach($cart_1 as $c){//trova le cartelle di secondo livello
	$cart[$c]=glob("$c*",GLOB_ONLYDIR);
}
//cerco gli eventuali file nella cartelle di primo livello
foreach($cart_1 as $c){
	$f="$c/*.*";
	$files=glob($f);//cerca i file nella cartella di primo livello $c
	echo "cartella $c contiene:<br />";
	if(is_array($files)){
		foreach($files as $file){
			echo "&nbsp;&nbsp;- $file<br />";
		}
	}else{
		echo "&nbsp;&nbsp;- non ci sono file<br />";
	}
}
//cerco gli eventuali file nelle cartelle di secondo livello
foreach($cart as $c1 => $c2){
	$f="$c1/$c2/*.*";
	$files=glob($f);//cerca i file nella cartella di secondo livello $c1/$c2
	echo "cartella $c1/$c2 contiene:<br />";
	if(is_array($files)){
		foreach($files as $file){
			echo "&nbsp;&nbsp;- $file<br />";
		}
	}else{
		echo "&nbsp;&nbsp;- non ci sono file<br />";
	}
}
?>
forse usando una funzione ricorsiva si potrebbe vedere, se esistono, le cartelle di terzo, quarto... livello, ma dovrei pensarci un po' a lungo
poi se ti interssa solo un tipo di file, es i file php puoi scrivere $f="$c/*.php";
o se vuoi partire da una cartella specifica $cart_1=glob("nome_cartella*",GLOB_ONLYDIR);
in questo modo trovi le cartelle e sottocartelle della nome_cartella
 

device75it

Nuovo Utente
25 Nov 2014
4
0
0
Ciao grazie innanzitutto,
diciamo che non è proprio cosi, mi spiego meglio:
parto da una determinata directory che chiamo partenza al cui interno ci sono 6 cartelle, questo riesco a cercarle tramite la parte di codice che avevo scritto all'inzio. Poi però, quando mi visualizza i nomi delle cartelle devo cliccarle ed accedervi per esempio la cartella1 nel body ora mi deve apparire il contenuto della cartella1 se sono file me li elenca e cliccando il nome mi si apre se è ancora una cartella mi appare un nuovo body con il contenuto della cartella1_2 e cosi via per le altre.
Spero di essere stato un po più chiaro. :(
Grazie
 

device75it

Nuovo Utente
25 Nov 2014
4
0
0
Continuando a lavorarci su e vedendo qua e la ho ottenuto una struttura completa, l'unica cosa è che ho una struttura ad albero già aperta, quindi se ho molti file e directory sarebbe lunghissima. Come posso fare per dire espandi una cartella specifica e ed eventuale sottocartelle.
Questo è l'ultima versione del codice che ho fatto, sarebbe da link ogni directory ed espanderla se ci clicco su , ma non so come.


PHP:
<?PHP
# Questa funzione permette di visualizzare un elenco a albero dei file e delle sottocartelle contenuti in $base.

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 finchè non è finita la directory, e la memorizza in $dir
  {
    if ($dir!="." && $dir!="..") #Non stampa "." e ".."
    {
      $dir_vuota=0;
          if(is_dir($base. "/" .$dir))
          {
           # Codice nel caso di directory
          echo '<LI style="list-style-image: url(foto/cartella.jpg)"><B>' . $dir . "</B>\n";
          elenco_dir($base. "/" .$dir); 
               echo "</LI>\n";
      }
       else
        {
          #Codice nel caso di file
           # Elimina l'estensione dei file   $dir nome 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.jpg)"><A href="' .$base . '/' . $dir . '">' . str_replace('_', ' ', substr($dir,0, strrpos($dir,"."))) . "</A></LI> (data file)\n";
									
									
									                  
									//verifica data file  
							//		echo "Ultima modifica: " . date("d/m/Y H:i:s", filemtime($dir));
									
									// identifica estensione del file 
									 $est = pathinfo($dir);			 	
								   echo "extension: " .$est['extension'];
									 
									
              }
      }
    }
  }
    if ($dir_vuota==1) echo '<LI class="testo" style="list-style-image: url(foto/sbagliato.jpg)">Nessun file presente</LI>';    
  echo "</UL><BR>";    
  closedir($handle_dir);
}
else #Codice nel caso di percorso non trovato
{
  echo "Percorso errato";
}
}    

# Chiamata funzione 
elenco_dir(".");

?>
 
Ultima modifica di un moderatore: