• ModSenior

    [Tutorial] Esplorare le cartelle

    Brevissimo tutorial, su come navigare all'interno di cartelle e sottocartelle, la base di un vero e proprio filemanager.
    La visualizzazione delle cartelle è sopra i file.
    Spero possa essere utile a qualcuno 😄

    manager.php
    [php]
    <?
    // Prendo dalla variabile get la cartella che voglio esplorare
    $c = (isset($_GET['c'])) ? $_GET['c'] : '';

    // Nome della cartella
    $car = 'cartella/'.$c.'/';

    function GetFile($car)
    {
    global $c;
    // Se non è un cartella esco
    if(!is_dir($car))
    return 0;

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file
    if ($files != '.' && $files != '..')
    {
    if(is_dir($car.$files))
    $vc[] = $files;
    else
    $vf[] = $files;
    }

    }
    // Se sono in una cartella mostro il pulsante per andare alla cartella principale
    if($c != '')
    echo '<a href="manager.php">Pagina Principale</a><br>';

    // Stampo le cartelle e i file
    echo 'Catelle:<br>';
    for($i=0; $i<count($vc); $i++)
        echo '<a href="manager.php?c='.$c.'/'.$vc*.'">'.$vc*.'</a><br>';
    echo 'File:<br>';
    for($i=0; $i<count($vf); $i++)
        echo $vf*.'<br>';
    

    }

    // Richiamo La funzione
    GetFile($car);
    ?>
    [/php]Con sti tutorial sto diventando noioso 😄


  • Consiglio Direttivo

    Assolutamente no 😄

    Continua continua che io appunto tutto :fumato:


  • User Attivo

    TheDarkIta, ti posso dire una cosa? 😄

    Ad ogni funzione di php devi mettere perforza return() altrimenti leggi l'errore che ti dà, se non sai che mettere a return() metti true 😉


  • ModSenior

    Che errore da?


  • User

    Ciao a tutti

    ho provato il codice e funziona egregiamente...

    Ho inserito la funzione per rendere il file cliccabile ma non mi si apre correttamente e poi vorrei visualizzare solo file con estensione .txt.

    Vi posto il codice modificato:

    [php]<?
    // Prendo dalla variabile get la cartella che voglio esplorare
    $c = (isset($_GET['c'])) ? $_GET['c'] : '';

    // Nome della cartella
    $car = './'.$c.'/';

    function GetFile($car)
    {
    global $c;
    // Se non è un cartella esco
    if(!is_dir($car))
    return 0;

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file

    if ($files != '.' && $files != '..')
    {
    if(is_dir($car.$files))
    $vc[] = $files;
    else
    $vf[] = $files;

    }
    

    }
    // Se sono in una cartella mostro il pulsante per andare alla cartella principale
    if($c != '')
    echo '<a href="testhome.php">Pagina Principale</a><br>';

    // Stampo le cartelle e i file
    echo 'Catelle:<br>';
    for($i=0; $i<count($vc); $i++)
        echo '<a href="testhome.php?c='.$c.'/'.$vc*.'">'.$vc*.'</a><br>';
    echo '<br>';
    for($i=0; $i<count($vf); $i++)
        echo '<a href="testhome.php?c='.$c.'/'.$vc*.'/'.$vf*.'">'.$vf*.'</a><br>';//ho modificato questa sezione
    

    }

    // Richiamo La funzione
    GetFile($car);
    ?> [/php]
    Grazie per l'aiuto.

    Manuel.


  • ModSenior

    Per rendere i file txt cliccabili dovresti fare cosi:
    [php]
    <?php
    // Prendo dalla variabile get la cartella che voglio esplorare
    $c = (isset($_GET['c'])) ? $_GET['c'] : '';

    // Nome della cartella
    $car = 'cartella/'.$c.'/';

    function GetFile($car)
    {
    global $c;
    // Se non è un cartella esco
    if(!is_dir($car))
    return 0;

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file
    if ($files != '.' && $files != '..')
    {
    if(is_dir($car.$files))
    $vc[] = $files;
    else
    $vf[] = $files;
    }

    }
    // Se sono in una cartella mostro il pulsante per andare alla cartella principale
    if($c != '')
    echo '<a href="manager.php">Pagina Principale</a><br>';

    // Stampo le cartelle e i file
    echo 'Catelle:<br>';
    for($i=0; $i<count($vc); $i++)
        echo '<a href="manager.php?c='.$c.'/'.$vc*.'">'.$vc*.'</a><br>';
    echo 'File:<br>';
    for($i=0; $i<count($vf); $i++)
    

    if(substr($vf*, -3, 3) == 'txt')
    echo '<a href="'.$car.$vf*.'">'.$vf*.'</a><br>';
    }

    // Richiamo La funzione
    GetFile($car);
    ?>
    [/php]
    Non ho testato, facci sapere se funziona correttamente.


  • User

    Grazie Trackback

    funziona alla grandissima.

    Pensa che non ci ho dormito per notti per risolvere questo problema con un codice scritto da me.

    Sai cosa?, stavo spulciando il manuale php

    perchè per quello che serve a me...

    mi servirebbe togliere l'estensione txt e vedere il solo titolo del file.

    In ogni caso il file funziona perfettamente

    e mi hai dato una grossa mano

    a buon rendere. 😉


  • ModSenior

    Prova cosi:
    [php]
    <?php
    // Prendo dalla variabile get la cartella che voglio esplorare
    $c = (isset($_GET['c'])) ? $_GET['c'] : '';

    // Nome della cartella
    $car = 'cartella/'.$c.'/';

    function GetFile($car)
    {
    global $c;
    // Se non è un cartella esco
    if(!is_dir($car))
    return 0;

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file
    if ($files != '.' && $files != '..')
    {
    if(is_dir($car.$files))
    $vc[] = $files;
    else
    $vf[] = $files;
    }

    }
    // Se sono in una cartella mostro il pulsante per andare alla cartella principale
    if($c != '')
    echo '<a href="manager.php">Pagina Principale</a><br>';

    // Stampo le cartelle e i file
    echo 'Catelle:<br>';
    for($i=0; $i<count($vc); $i++)
        echo '<a href="manager.php?c='.$c.'/'.$vc*.'">'.$vc*.'</a><br>';
    echo 'File:<br>';
    for($i=0; $i<count($vf); $i++)
    

    if(substr($vf*, -3, 3) == 'txt')
    echo '<a href="'.$car.$vf*.'">'.substr($vf*,0,strlen($vf*)-4).'</a><br>';
    }

    // Richiamo La funzione
    GetFile($car);
    ?>
    [/php]


  • User

    Ti ringrazio davvero molto

    Funziona perfettamente

    Grazie Thedarkita davvero

    Sto cercando di imparare il php

    Ma non essendo il mio primo lavoro...

    Non ho tantissimo tempo..

    Ci sentiamo continuo i miei test

    Ciao grazie ancora


  • User

    Ciao Thedarkita

    Stavo stavo testando il codice, che va alla grande come ti dicevo,

    ma mi sono accorto che i file non sono in ordine alfabetico...

    Stavo scervellandomi per ordinarlo

    o in ordine alfabetico oppure per uultima modifica

    mi puoi dare un ultima mano?

    Se puoi ti ringrazio molto.

    Buona giornata.


  • User

    Prova così:

    [PHP] <?php
    // Prendo dalla variabile get la cartella che voglio esplorare
    $c = (isset($_GET['c'])) ? $_GET['c'] : '';

    // Nome della cartella
    $car = 'cartella/'.$c.'/';

    function GetFile($car)
    {
    global $c;
    // Se non è un cartella esco
    if(!is_dir($car))
    return 0;

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file
    if ($files != '.' && $files != '..')
    {
    if(is_dir($car.$files))
    $vc[] = $files;
    else
    $vf[] = $files;
    }

    }

    // imposto l'ordinamento alfabetico ai contenuti degli array
    sort($vc);
    sort($vf);

    // Se sono in una cartella mostro il pulsante per andare alla cartella principale
    if($c != '')
        echo '<a href="manager.php">Pagina Principale</a><br>';
        
    // Stampo le cartelle e i file
    echo 'Catelle:<br>';
    for($i=0; $i<count($vc); $i++)
        echo '<a href="manager.php?c='.$c.'/'.$vc*.'">'.$vc*.'</a><br>';
    echo 'File:<br>';
    for($i=0; $i<count($vf); $i++)
    

    if(substr($vf*, -3, 3) == 'txt')
    echo '<a href="'.$car.$vf*.'">'.substr($vf*,0,strlen($vf*)-4).'</a><br>';
    }

    // Richiamo La funzione
    GetFile($car);
    ?> [/PHP]

    In sostanza ho adoperato la funzione sort() per ordinare gli array che accumulano i nomi delle cartelle e dei files presenti nella directory specificata.

    :ciauz:


  • User

    Ciao grazie molte.

    Si va tutto ok tranne una cosa:

    alla fine quando ti trovi nell'ultima directory

    e c'è la lista dei file,

    spunta l'errore:

    Warning: sort() expects parameter 1 to be array, null given in

    perchè lui non trova più directory essendoci solo file...

    Sto cercando di rimediare

    Grazie comunque.


  • User

    Puoi ovviare un paio modi:

    1. Definisci i due array all'inizio della funzione ( es: $vc = array(); )
    2. Fai un bel controllo per entrambi del tipo: if (is_array($vc)) sort($vc);

    Prova e fammi sapere :ciauz:


  • User

    Grazie si adesso è davvero tutto ok.

    Scusami ma sto imparando il php di sana pianta,

    visto che tutti i miei siti li ho creati con buoni script per carità

    e vanno bene

    però ho l'esigenza di imparare il php il più possibile....

    Adesso ero curioso su come ordinarli

    per data di modifica o di upload...

    quindi stavo cercando di imparare il comando filemtime

    combinato con il sort

    Comunque grazie ancora ...


  • User

    Ciao scusate ma avrei bisogno di un ulteriore aiuto.

    È tutto il giorno che ci sbatto la testa ma

    non riesco ad ottenere un' altra funzione.

    Sto cercando di crearmi un un file.php che legga, come il precedente,

    i file in tutte le cartelle e sottocartelle
    ,
    ma che mi visualizzi gli ultimi 10 file uploadati da me,

    o comunque modificati da poco.

    Sto studiando i vari comandi sort e filemdate

    ma per ora pochi risultati...

    Se mi date ancora qualche dritta

    mi fate un grosso piacere.

    In questi anni ho fatto solo il grafico,

    ed è da poco che mi cimento con il php.

    Grazie ciao.

    (credo che la punteggiatura sia ok ora, chiedo scusa per il precedente messaggio)


  • User Newbie

    Ciao a tutti.
    Il sistema funziona perfettamente. L'unica cosa che non riesco a fare è realizzare un link alla cartella di livello superiore.
    Se, ad esempio, nella root ho cartella 1, al cui interno si trova cartella 2, ed entro in quest'ultima, come faccio a tornare a cartella 1? Il tutorial prevede un link per tornare alla pagina principale ma non per "uscire" dall'ultima cartella in cui si è entrati.
    Grazie.


  • User Attivo

    Ciao Thedarkita;

    Mi servirebbe un tuo aiuto a risolvere un grosso problema. So che il post è vecchio ma spero che mi risponderai ugualmente. Ho provato il tuo codice, di elenco cartelle e file. Solo che mi servono due modifich e sono le seguenti:

    1. Elencare directory tutte con tutre le estensioni;

    2. Elencare le sottocartelle con tutti i file all'interno delle cartellle e sottocartelle

    3. Debbo inserire il risultato della ricerca in un db.

    Mi puoi aiutare per favore ???? Sono disperato sono mesi che sto cercando inutilmente soluzioni a destra e a manca. Grazie in anticipo

    Il codice è il seguente:

    [PHP]

    <?php
    

    // Prendo dalla variabile get la cartella che voglio esplorare
    $c = (isset($_GET['c'])) ? $_GET['c'] : '';

    // Nome della cartella
    $car = 'c://'.$c.'/';

    function GetFile($car)
    {
    global $c;
    // Se non è un cartella esco
    if(!is_dir($car))
    return 0;

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file
    if ($files != '.' && $files != '..')
    {
    if(is_dir($car.$files))
    $vc[] = $files;
    else
    $vf[] = $files;
    }

    }
    // Se sono in una cartella mostro il pulsante per andare alla cartella principale
    if($c != '')
    echo '<a href="manager.php">Pagina Principale</a><br>';

    // Stampo le cartelle e i file
    echo 'Catelle:<br>';
    for($i=0; $i<count($vc); $i++)
        echo '<a href="manager.php?c='.$c.'/'.$vc*.'">'.$vc*.'</a><br>';
    echo 'File:<br>';
    for($i=0; $i<count($vf); $i++)
        echo $vf*.'<br>';
    

    }

    // Richiamo La funzione
    GetFile($car);
    ?>
    </body>
    </html>

    [/PHP]

    Ah, un ultima cosa. La sottoglineatura non mi servirebbe in quanto devo leggere i file all'interno di ogni cartella. Spero di essermi spiegato al meglio.