elenco automatico delle cartelle

  • Creatore Discussione Creatore Discussione Mtk-kun
  • Data di inizio Data di inizio

Mtk-kun

Nuovo Utente
6 Giu 2011
19
0
0
buona sera a tutti!
spero possiate aiutarmi a risolvere un io problema relativo al php, premetto che so poco o niente di questo linguaggio, passo ad esporre il problema:

è da tempo che uso uno script per la lista automatica dei file presenti in una cartella, una volta indicata la cartella lo script restituisce come output la lista dei file presenti in quella cartella, bene, vorrei apllicare lo stesso principio ma anzi che la lista dei file presenti in una cartella vorrei che venissero listate le sotto-cartelle presenti nella cartella principale

più nello specifico la mia situazione è questa:

ho una cartella principale, 3 sotto cartelle uno due e tre nella cartella uno due e tre ci sono le sotto cartelle a b c quindi
main/uno/a,b,c
main/due/a,b,c
main/tre/a,b,c

bene io vorrei mettere uno script nella pagina main.php il quale mi listi le cartelle contenute nella carella main, poi una volta cliccato su una delle tre cartelle si veda il contenuto di quella cartella

ovviamente aggiungendo la cartella 4 si deve aggiornare automaticamente

è possibile fare ciò? appure ci sono alternative?

mille grazie in anticipo
 
Devi fare un controllo con is_dir() per escludere i file, quindi:

PHP:
$dir = "/cartella";
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if( ($file !='.')&&($file !='..') ){
            echo $file . "\n";
           }
        }
        closedir($dh);
    }
}
 
molte grazie innanzi tutto per la risposta, dunque lo script che io uso è questo
PHP:
<?php

     
    $dir = "main/";
     

     
    $before = '';
   
    $after = '';
     

     
    $estensioni = array();
     
     
    if (is_dir($dir)) {
     
    if ($dh = opendir($dir)) {
     
    while (($file = readdir($dh)) !== false) {
     
    if(is_file($dir . $file) && ((isset($estensioni) && count($estensioni) > 0 && in_array(strtolower(end(explode(".", $file))),  $estensioni )) || !isset($estensioni) || count($estensioni) < 1)){
     
    echo $before.'<a href="'.$dir.$file.'" >'.$dir.$file.'</a>'.$after. "\n";
     
    }
     
    }
     
    closedir($dh);
     
    }
     
    }
     
?>

dovrei sostituire questa parte
PHP:
    if (is_dir($dir)) {
     
    if ($dh = opendir($dir)) {
     
    while (($file = readdir($dh)) !== false)
con quella che mi hai fornito tu?
 
devi sostituire tutto a partire da dopo
PHP:
$estensioni = array();
in poi.
 
sei stato davvero gentilissimo, funziona tutto alla grande, facendo poi delle prove ho aggiunto la possibilità di cliccare sulla cartella che restituisce come output
così:
PHP:
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if( ($file !='.')&&($file !='..') ){
            echo $before.'<a href="'.$dir.'" >'.$file.'</a>'.$after. "\n";
           }
        }
        closedir($dh);
    }
}

e qui mi sorge un dubbio, provandolo su serverl locale (XAAMP) ho notato che la lista la esegue in modo perfetto, ma una volta cliccato su una di quelle cartelle mi fa andare sulla classica schermata di apache con la lista delle cartelle su server con la possibilità di navigare tra le catelle stesse, c'è un modo per, una volta cliccata sul link della lista, andare direttamente alla cartella selezionata senza la possibiltà di vedere il contenuto di tutto il server?
grazie mille
 
sei stato davvero gentilissimo, funziona tutto alla grande, facendo poi delle prove ho aggiunto la possibilità di cliccare sulla cartella che restituisce come output
così:
PHP:
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if( ($file !='.')&&($file !='..') ){
            echo $before.'<a href="'.$dir.'" >'.$file.'</a>'.$after. "\n";
           }
        }
        closedir($dh);
    }
}

e qui mi sorge un dubbio, provandolo su serverl locale (XAAMP) ho notato che la lista la esegue in modo perfetto, ma una volta cliccato su una di quelle cartelle mi fa andare sulla classica schermata di apache con la lista delle cartelle su server con la possibilità di navigare tra le catelle stesse, c'è un modo per, una volta cliccata sul link della lista, andare direttamente alla cartella selezionata senza la possibiltà di vedere il contenuto di tutto il server?
grazie mille

mi auto rispondo in pratica faccio in modo che lo script punti ad un file .php presente nella cartella di destinazione

e ora ho bisogno di un altro consiglio, nella parte
PHP:
$dir = "main/";
al posto di main vorrei che ci fosse un testo presente in un file .txt dentro la stessa cartella, ho provato con
PHP:
$dir = "include('nome.txt')";
ma non funge, come posso fare?
mille grazie
 
Così:
PHP:
$dir = file_get_contents('file.txt');
grazie mille, ma mi sono accorto che il mio percorso è più lungo, cioè
PHP:
$dir = "main/image/fantasy/";

e dopo la cartella fantasy mi serve che prenda il nome della cartella successiva dal file.txt

posso usare lo stesso la funzione file_get_contents('file.txt');??
 
grazie mille, sei stato davvero gentilissimo funziona tutto alla grande, un'ultima cosa, se volessi mettere uno "/" alla fine del percorso come dovrei fare? ho provato con
PHP:
$dir = 'main/image/fantasy/' . file_get_contents('file.txt')/;
ma non va, c'è un modo per includere lo slash?
 
grazie mille, hai risolto ogni mio dubbio, sei davvero gentilissimo
ora mi sa che inizierò a studiare il php:book::book:
grazie ancora!
 

Discussioni simili