Visualizzazione risultati 1 fino 21 di 21

Discussione: Listare tutti i files con estensione .txt nel proprio sito

  1. #1
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito Listare tutti i files con estensione .txt nel proprio sito

    Ciao a tutti,
    E' possibile tramite filezilla ftp client o qualche funzione php listare tutti i files con estensione txt presenti nel proprio sito?
    Mi spiego meglio, ne ho diversi in / ma anche in sottocartelle, per es. /abc, /def ecc, come posso fare?

    graz a chi risponderà.

  2. #2
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    sto provando questa funzione in filezilla ftp client, vediamo se funge (naturalmente ci sta mettendo un po', è normale spero...):

    Ultima modifica di gutguy2 : 28-06-2015 alle ore 15.32.40

  3. #3
    Guest

    Predefinito

    La classe in PHP che si occupa di leggere le directory è http://php.net/manual/en/class.directoryiterator.php

    Quest'esempio legge dentro la cartella immagini, nota bene per come è impostato a dire il vero non legge solo le immagini ma legge tutti i file che sono all'interno della cartella immagini, devo aggiornarlo ma non ho tempo adesso, comunque è l'esempio che fa per te, invece si getFilename tu userai questo

    http://php.net/manual/en/directoryit...textension.php

    e poi listi solo i .txt, ovviamente devi definire le directory di lettura...Ciao

    Codice PHP:


    //Impostiamo dove andiamo a leggere, in questo caso la cartella immagini dentro al nostro progetto
    $dir_immagine = new DirectoryIterator('immagini');

    //scorriamo tutta la directory
    foreach ($dir_immagine as $fileIMG){

    //determiniamo che sia un file(togliamo i puntini inutili)
    if($fileIMG->isFile()) {

    //recuperiamo nome e percorso da passare al template
    $nome=$fileIMG->getFilename();
    $percorso = 'immagini/'.$nome;


    //Stampiano il nome dei file ed il percorso del file...
    print'<pre>';print_r($nome);print'</pre>';
    print
    '<pre>';print_r($percorso);print'</pre>';

    }
    }

  4. #4
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    intato ti ringrazio tanto per aver risposto, in effett cercavo qualcosa in php, non trovandolo ho usato filezilla...
    ti chiedo visto che mi da errore, potresti potare il codice completo?
    Naturalmente come sai a me serve solo per .txt

  5. #5
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    sto provando questi ma non me ne funziona uno non so perché...

  6. #6
    Guest

    Predefinito

    Si puoi usare anche glob gli dai il path e poi metti il .txt e fai il ciclo come nel manuale cioè

    Codice PHP:

    foreach (glob("CARTELLA/*.txt") as $filename) {
    echo
    "$filename size " . filesize($filename) . "\n";
    }
    Se non vedi nulla vuol dire che non entra nella tua cartella, tu devi sempre calcolare che il PHP viene eseguito in una pagina che si troverà o dentro una cartella o dove si trova l'index.php, cioè se tu hai una cartella che si chiama PHP e dentro hai tutti i tuoi file.php, se esegui il codice da uno di questi file ma vuoi leggere una cartella che non è PHP ma per esempio cartella PINCOPALLO, che si trova sempre dentro al progetto ma fuori dalla cartella PHP dovrai uscrire dalla cartella quindi devi mettere i puntini

    ../CARTELLA/*.txt

    Quello funziona e te li elenca tutti si....Io uso directory iterator perchè mi trovo bene, ha diversi metodi che risultano comodi, ma la logica è sempre quella con directory iterator specifichi la cartella dove vuoi leggere quindi

    Codice PHP:
    $dir = new DirectoryIterator('../immagini');
    //scorriamo tutta la directory
    foreach ($dir as $file){

    //determiniamo che sia un file(togliamo i puntini inutili)
    if($file->isFile()) {

    //Se l'estensione è uguale a jpg
    if ($file->getExtension() == "jpg" ){

    //recupero il nome delle jpg
    $nome=$file->getFilename();

    //stampo tutti i nomi
    print '<pre>';print_r($nome);print'</pre>';

    }

    }
    }
    Nota bene io per leggere la cartella immagini sono dovuto uscire dalla cartella dove sto eseguendo il codice PHP quindi ho messo i ../ per uscire...al posto della cartella immagini tu metterai la tua e poi metti txt invece che jpg.

    puoi anche fare questa prova

    $dir = new DirectoryIterator('../');

  7. #7
    Guest

    Predefinito

    Ad esempio io ho una cartella in "/" che è la directory principale di altervista ed il mio progetto è una sottocartella che sta dentro '/'

    per uscrire dalla cartella e da dove sto eseguendo il codice di php per leggere tutto quello che c'è nella directory principale io devo scrivere,

    Codice PHP:

    $dir
    = new DirectoryIterator('.././../');
    //scorriamo tutta la directory
    foreach ($dir as $file){
    print
    '<pre>';print_r($file);print'</pre>';
    }
    A te dipende in che cartella stai...ma non c'è niente di difficile... ;) Ciao buona settimana...

  8. #8
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    non so come ringraziarti, sei stato molto illuminante, sopratutto per quanto riguarda il discorso della cartella...
    ho provato ma mi da errore, come devo scrivere i codice propriamente detto, cioè completo di tags php?
    Altra cosa, se volessi listare tutti i .txt che sono dentro a "/" compreso le sue sottocartelle (ad es. /2; /lavoro; ecc)?

  9. #9
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    per es. mi da questo errore:



    che vedi poi a http://gutguy2.altervista.org/listatxt

    se uso:

    Codice PHP:
    <?php
    $dir
    = new DirectoryIterator('/dir');
    //scorriamo tutta la directory
    foreach ($dir as $file){

    //determiniamo che sia un file(togliamo i puntini inutili)
    if($file->isFile()) {

    //Se l'estensione è uguale a jpg
    if ($file->getExtension() == "jpg" ){

    //recupero il nome delle jpg
    $nome=$file->getFilename();

    //stampo tutti i nomi
    print '<pre>';print_r($nome);print'</pre>';

    }

    }
    }


    ?>
    che poi c'è http://gutguy2.altervista.org/listatxt/dir/file.txt
    Ultima modifica di gutguy2 : 06-07-2015 alle ore 13.47.48

  10. #10
    Guest

    Predefinito

    Non è corretta la directory di lettura non può costruirla....se non erro tu stai scrivendo qui /membri2/gutguy2/listatxt/index.php

    dentro la cartella lista text sembra esserci la cartella dir.Se metti lo slash in quel modo ti darà errore, prova a vedere cosa ti risulta se scrivi questo

    Codice PHP:

    $dir
    = new DirectoryIterator('dir');

    foreach (
    $dir as $file){
    print
    '<pre>';print_r($file);print'</pre>';
    }

  11. #11
    Guest

    Predefinito

    Se poi vuoi tagliare la testa al toro, innanzi tutto vedi dove sei scrivendo questo:
    Codice PHP:
    $dir = new DirectoryIterator(__DIR__);

    foreach (
    $dir as $file){
    print
    '<pre>';print_r($file);print'</pre>';
    }
    I primi due array di solito hanno il secondo elemento SplFileInfo con i puntini e poi ti elenca i file presenti nella directory.Così intanto vedi dove sei...quale directory stai ciclando

  12. #12
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    scusa inanzitutto il ritardo e non so come ringraziarti, infatti ora funziona: http://gutguy2.altervista.org/listatxt/

    ho usato:

    Codice PHP:
    <?php
    //lista solo *.txt
    $dir = new DirectoryIterator('dir');

    foreach (
    $dir as $file){


    //determiniamo che sia un file(togliamo i puntini inutili)
    if($file->isFile()) {

    //Se l'estensione è uguale a txt
    if ($file->getExtension() == "txt" ){

    //recupero il nome delle txt
    $nome=$file->getFilename();

    //stampo tutti i nomi
    print '<pre>';print_r($nome);print'</pre>';

    }

    }
    }


    ?>
    tante grazie a buon rendere
    Ultima modifica di gutguy2 : 22-07-2015 alle ore 19.49.19

  13. #13
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    però scusa, ora come faccio a listare tutti i txt presenti nel mio sito?
    cioè in "/" e in tutte le sue sottocartelle?

  14. #14
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Nel mio messaggio precedente che ho eliminato avevo scritto un altro modo per elencare i file:

    Codice PHP:
    function listatxt($directory='')
    {
    foreach(
    glob($directory.'*.txt') as $file) //elenco tutti i file txt di $directory
    echo '<br>'.$file;

    foreach(
    glob($directory.'*', GLOB_ONLYDIR | GLOB_MARK) as $cartella) //per ogni cartella di $directory, richiamo la funzione passando la cartella
    if($cartella != './' && $cartella != '../') //non teniamo conto di ./ altrimenti va in loop infinito, e ../ altrimenti torna anche indietro!
    listatxt($cartella);
    }
    listatxt();
    Quando richiami listatxt(), puoi passare come parametro il percorso da cui partire. Se non passi nulla prenderà il percorso corrente del file. Ad esempio richiamando così:
    Codice:
    listatxt('/membri/gutguy2/');
    Dovresti visualizzare tutti i file .txt presenti nel tuo spazio indipendentemente dalla posizione di esecuzione dello script.

    Ciao!

    EDIT:
    Ovviamente dimmi se non capisci il funzionamento dello script.
    Ultima modifica di alemoppo : 25-07-2015 alle ore 14.59.20

  15. #15
    Guest

    Predefinito

    Riallacciandomi a quello che ha detto Alemoppo, PHP è un linguaggio ad oggetti, sarebbe meglio iniziare a sfruttare gli oggetti, dato che i Javisti pensano che PHP sia un linguaggio semplice e Java invece è il TOP, come altri programmatori di altri linguaggi, quindi in barba a chi non conosce le potenzialità del PHP, ti metto l'esempio di alemoppo ma ad oggetti...la Classe non è altro questa volta che RecursiveDirectoryIterator


    Codice PHP:

    $dir
    = '.';//Globale cartella

    $file = new RecursiveIteratorIterator(
    new
    RecursiveDirectoryIterator($dir)
    );
    foreach(
    $file as $percorso => $fileNome) {

    if (
    $fileNome->getExtension() == 'php'){//Elenco i file php
    print '<pre>';print_r($percorso);print '</pre>';
    }

    }
    Se vuoi stampare solamente il nome del file senza il percorso puoi tenere anche l'esempio che ti ho fatto prima e cambi la classe e basta nella prima riga di codice, avrai tutti i text ma solo il nome in tutto il sito:

    Codice PHP:

    $dir
    = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/membri/gutguy2'));

    foreach (
    $dir as $file){


    //determiniamo che sia un file(togliamo i puntini inutili)
    if($file->isFile()) {

    //Se l'estensione è uguale a txt
    if ($file->getExtension() == "txt" ){

    //recupero il nome delle txt
    $nome=$file->getFilename();

    //stampo tutti i nomi
    print '<pre>';print_r($nome);print'</pre>';

    }

    }
    }
    Ultima modifica di fractalcosmo : 26-07-2015 alle ore 00.33.15

  16. #16
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    funzonano tutte e due sia quella di alemoppo che quella di fractalcosmo, quindi grazie ad entrambi.
    ora forza chiedo troppo, ma è possibile fare in modo che visualizzi ance il percorso del txt?

  17. #17
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Per "percorso" intendi da tuonick.altervista.org/cartelle/file.txt ?
    Beh, non è difficile, provaci!

    Ad esempio, dal mio, è sufficiente modificare nella stringa
    Codice:
    /membri/gutguy2
    con
    Codice:
    gutguy2.altervista.org
    Potresti farlo con la str_replace().

    Ciao!

  18. #18
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    rettifico quanto detto:

    mi funziona solo il seguente codice:

    Codice PHP:
    <?php
    $dir
    = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/membri/gutguy2'));

    foreach (
    $dir as $file){


    //determiniamo che sia un file(togliamo i puntini inutili)
    if($file->isFile()) {

    //Se l'estensione è uguale a txt
    if ($file->getExtension() == "txt" ){

    //recupero il nome delle txt
    $nome=$file->getFilename();

    //stampo tutti i nomi
    print '<pre>';print_r($nome);print'</pre>';

    }

    }
    }


    ?>
    per percorso, intendo una cosa del genere:

    non importa che sia "http://gutguy2.altervista.org/" va bene anche "/" (ad es. "/cartella1/file.txt" o "/cartella2/file.txt") o "/membri/gutguy2/" che poi non ho capito quando bisogna usare la path membri?
    Ultima modifica di gutguy2 : 29-07-2015 alle ore 13.54.46

  19. #19
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Vedi i metodi della DirectoryIterator. getPathname() dovrebbe fare il tuo caso.

    La path membri va usata quando vuoi riferirti ad un file con percorso assoluto.

    Come mai il mio script non ti funziona più? A me funziona.

    Ciao!
    Ultima modifica di alemoppo : 29-07-2015 alle ore 13.51.24

  20. #20
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    scusami, ma non poco pratico, come faccio a inserire il percorso quindi? mi posti il codice?
    ora vedo di far funzionare il tuo

    allora uso il seguente codice, dimmi se è ok:

    Codice PHP:
    <?php
    function listatxt($directory='')
    {
    foreach(
    glob($directory.'*.txt') as $file) //elenco tutti i file txt di $directory
    echo '<br>'.$file;

    foreach(
    glob($directory.'*', GLOB_ONLYDIR | GLOB_MARK) as $cartella) //per ogni cartella di $directory, richiamo la funzione passando la cartella
    if($cartella != './' && $cartella != '../') //non teniamo conto di ./ altrimenti va in loop infinito, e ../ altrimenti torna anche indietro!
    listatxt($cartella);
    }
    listatxt();
    ?>
    che poi è raggiungibile da qui

    dimmi dove sbaglio
    Ultima modifica di gutguy2 : 30-07-2015 alle ore 12.04.30

  21. #21
    gutguy2 non è connesso Utente
    Data registrazione
    22-12-2005
    Residenza
    BO
    Messaggi
    168

    Predefinito

    @alemoppo

    ora il tuo script funziona, avevo sbagliato io il percorso, mettendo quello assoluto tra l'altro mi fa vedere anche il percorso, quindi non so come ringraziarti.

    codice php:

    Codice PHP:
    <?php
    function listatxt($directory='')
    {
    foreach(
    glob($directory.'*.txt') as $file) //elenco tutti i file txt di $directory
    echo '<br>'.$file;

    foreach(
    glob($directory.'*', GLOB_ONLYDIR | GLOB_MARK) as $cartella) //per ogni cartella di $directory, richiamo la funzione passando la cartella
    if($cartella != './' && $cartella != '../') //non teniamo conto di ./ altrimenti va in loop infinito, e ../ altrimenti torna anche indietro!
    listatxt($cartella);
    }
    listatxt('/membri/gutguy2/');
    ?>
    output:

    /membri/gutguy2/dir/sottodir/file1.txt
    /membri/gutguy2/dir/sottodir/file2.txt
    /membri/gutguy2/dir/sottodir/file3.txt
    /membri/gutguy2/dir/sottodir/file4.txt
    Ultima modifica di gutguy2 : 01-08-2015 alle ore 10.29.14

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •