Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Leggere file contenuti in directory e sottocartelle

    Ciao a tutti, sto utilizzando il codice qui sotto per leggere tutti i file jpg presenti in una cartella e tutto funge correttamente... ora però mi chiedo come posso fare per leggere anche i file contenuti all'interno delle tante sotto cartelle contenute nella mia directory principale($directory = "public/photo"?

    Codice PHP:
    <? 
    $filter 
    ".jpg";
    // directory dove cercare
    $directory "public/photo";

    @
    $d dir($directory);
    if (
    $d) { 
    while(
    $entry=$d->read()) { 
    $ps strpos(strtolower($entry), $filter);
    if (!(
    $ps === false)) { 
    $items[] = $entry

    }
    $d->close();
    sort($items);
    }

    echo 
    "ecco la lista delle foto contenute nella cartella";

    // 
    for($i=0$i<sizeof($items); $i++) {
    echo 
    " nome della foto".$items[$i]."
    "
    ;
    }

    ?>
    Nella mia cartella foto ci sono altre 60 cartelle circa e all'interno di ognuna di queste cartelle ci sono 2 o 3 cartelle contenenti dei file jpg... io vorrei leggesse tutto, è fattibile?

    Mi date un aiuto? ...non so come procedere!


  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Devi scrivere una funzione ricorsiva, l'ho scritta al volo, potrebbe non funzionare, ma almeno ti da un punto di partenza:

    codice:
    $filter = ".jpg";
    // directory dove cercare
    $directory = "public/photo"; 
    
    function readDirRecursive($directory, $filter) {
    @$d = dir($directory);
      if ($d) {
      while($entry=$d->read()) {
        $ps = strpos(strtolower($entry), $filter);
        if ($ps !== false) {
           $items[] = $entry;
        } elseif(is_dir($entry) && $entry != "." && $entry != '..')) {
    
           $items = array_merge($items, readDirRecursive($entry, $filter));
    
        }
      }
    
      $d->close();
      
      sort($items);
      return $items;
    } 
    
    $items = readDirRecursive($directory, $filter);
    
    echo "ecco la lista delle foto contenute nella cartella";
    
    //
    for($i=0; $i<sizeof($items); $i++) {
    echo " nome della foto".$items[$i]."
    ";
    }

    [/code]

  3. #3
    Grazie della risposta, ho appena provato ma non mi funziona... non mi stampa niente a video, la pagina è completamente vuota, purtroppo non riesco a trovare l'errore, perchè non sono pratico di php, potresti darmi una mano a correggere?

    ti posto il codice finale della pagina, quello che dovrebbe restituirmi a video l'elenco delle jpg nel formato che serve a me!

    Codice PHP:
    <?

    // search jpg
    $filter ".jpg";
    // path to the directory you want to scan
    $directory "public/photo";


    // read through the directory and filter files to an array
    function readDirRecursive($directory$filter) {
    @
    $d dir($directory);
      if (
    $d) {
      while(
    $entry=$d->read()) {
        
    $ps strpos(strtolower($entry), $filter);
        if (
    $ps !== false) {
           
    $items[] = $entry;
        } elseif(
    is_dir($entry) && $entry != "." && $entry != '..')) {

           
    $items array_merge($itemsreadDirRecursive($entry$filter));

        }
      }

      
    $d->close();
      
      
    sort($items);
      return 
    $items;


    $items readDirRecursive($directory$filter);

    // third, the playlist is built in an xspf format
    // we'll first add an xml header and the opening tags .. 
    header("content-type:text/xml;charset=utf-8");

    echo 
    "<playlist version='1' xmlns='http://xspf.org/ns/0/'>\n";
    echo 
    " <title>Sample PHP Generated Playlist</title>\n";
    echo 
    " <info>http://www.blabla.com/</info>\n";
    echo 
    " <trackList>\n";

    // ...............................................................................
    for($i=0$i<sizeof($items); $i++) {
    echo 
    " <track>\n";
    echo 
    " <title>".$items[$i]."</title>\n";
    echo 
    " <location>blablabla".$directory.'/'.$items[$i]."</location>\n";
    echo 
    " </track>\n";
    }

    // .. and last we add the closing tags
    echo " </trackList>\n";
    echo 
    "</playlist>\n";

    ?>

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    hai provato a passare il percorso assoluto della directory?

    ciao

  5. #5
    gianiaz, ho provato con il percorso assoluto e non cambia nulla!

    Puo dipendere secondo te dalla versione di php... sul mio server ho la versione 4.3.0


    Io ho provato anche un altro script che è simile, ma che gia sapevo che funziona solo con php5... lo posto qui sotto:
    Codice PHP:
    <?php

    // *** requires PHP5 ***

    // search for jpg files
    $filter ".jpg";

    // path to the directory you want to scan
    $directory './';

    $it = new RecursiveDirectoryIterator("$directory");

    foreach(new 
    RecursiveIteratorIterator($it) as $file)
    {
      if (!((
    strpos(strtolower($file), $filter)) === false))
      {
        
    $items[] = preg_replace("#\\\#""/"$file);
      }
    }
    sort($items);

    header("content-type:text/xml;charset=utf-8");

    echo 
    "<?xml version='1.0' encoding='UTF-8'?>\n";
    echo 
    "<playlist version='1' xmlns='http://xspf.org/ns/0/'>\n";
    echo 
    "  <title>Sample PHP Generated Playlist</title>\n";
    echo 
    "  <info>xxx</info>\n";
    echo 
    "  <trackList>\n";

    foreach(
    $items as $item)
    {
      
    $title_array explode('/'$item);
      
    $title substr(end($title_array), 0, (strlen(end($title_array)) - 4));

      echo 
    "    <track>\n";
      echo 
    "      <title>"    $title "</title>\n";
      echo 
    "      <location>" $item  "</location>\n";
      echo 
    "    </track>\n";
    }

    echo 
    "  </trackList>\n";
    echo 
    "</playlist>\n";

    ?>
    Chiaramente mi da errore
    codice:
    Fatal error: Cannot instantiate non-existent class: recursivedirectoryiterator in /home/8034033890/www/web/v2/read33.php on line 11

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Si ovvio, quella è una classe di php5, e comunque farebbe lo stesso lavoro del tuo script originale.

    prova a mettere nel tuo file all'inizio :

    error_reporting(E_ALL); // report all errors
    ini_set("display_errors", 1);


    e togli la @ davanti a @$d = dir($directory);

    Dovresti perlomeno vedere se ci sono degli errori.

    ciao

  7. #7
    niente! non mi stampa niente!
    Non c'è un altra soluzione per leggere i file nelle sottocartelle con la mia versione di php?

  8. #8
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    mettici un po' del tuo però dai...

    prova a mettere un po' di debug nella funzione:

    codice:
    $filter = ".jpg";
    // directory dove cercare
    $directory = "public/photo"; 
    function readDirRecursive($directory, $filter) {
    echo "funzione richiamata con i paremtri:
    ";
    echo "directory:".$directory."
    ";
    echo "filter:".$filter."
    ";
    $d = dir($directory);
    
      if ($d) {
      while($entry=$d->read()) {
        $ps = strpos(strtolower($entry), $filter);
        if ($ps !== false) {
           $items[] = $entry;
        } elseif(is_dir($entry) && $entry != "." && $entry != '..')) {
           
           echo "l'entry :".$entry." è una directory, richiamo nuovamente readDirRecursive con i parametri (".$entry.",".$filter.");
    ";
    
           $items = array_merge($items, readDirRecursive($entry, $filter));
    
        } else {
           echo "l'entry :".$entry." non soddisfa il filtro e non è una directory
    ";
        }
      } else {
    
        echo "Non riesco a leggere la directory : ".$directory."
    ";
    
      }
    
      $d->close();
      
      sort($items);
      return $items;
    } 
    
    $items = readDirRecursive($directory, $filter);
    
    echo "ecco la lista delle foto contenute nella cartella";
    
    //
    for($i=0; $i<sizeof($items); $i++) {
    echo " nome della foto".$items[$i]."
    ";
    }
    Ora prova a vedere che ti stampa la funzione.


  9. #9
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    ciao, visto che oggi mi serviva una cosa simile sono partito dal codice che abbiamo scritto ieri, e che come ti avevo detto non avevo testato.
    Era pieno di errori anche di sintassi, comunque questo l'ho testato e sembra funzionare:

    codice:
    <?php
    $filter = "jpg";
    // directory dove cercare
    $directory = "D:/Archivio Foto/";
    
    function readDirRecursive($directory, $filter = '', $debug = 0) {
    
      if($directory{strlen($directory)-1} !== '/' && $directory{strlen($directory)-1} !== '\\') {
    
        $directory .= '/';
    
      }
    
      if($debug) {
        echo "funzione richiamata con i paremtri:
    ";
        echo "directory:".$directory."
    ";
        echo "filter:".$filter."
    ";
      }
    
      $items = array();
    
      $d = dir($directory);
    
      if ($d) {
    
        while($entry=$d->read()) {
    
          $path_assoluto = $directory.$entry;
    
          if(is_dir($path_assoluto) && $entry != "." && $entry != '..') {
    
            if($debug) {
    
              echo "l'entry :".$path_assoluto." è una directory, richiamo nuovamente readDirRecursive con i parametri (".$entry.",".$filter.");
    ";
    
            }
    
            $items = array_merge($items, readDirRecursive($path_assoluto, $filter, $debug));
    
          } else {
    
            $add = true;
    
            if($filter) {
    
              $ext = array_pop(explode('.', $path_assoluto));
    
              if(strpos(strtolower($path_assoluto), $filter) === false) {
    
                $add = false;
    
              }
    
            }
    
            if($add) {
    
              $items[] = $path_assoluto;
    
            } elseif($debug) {
    
              echo "l'entry :".$entry." non soddisfa il filtro
    ";
    
            }
    
          }
    
        }
    
        $d->close();
    
        sort($items);
    
        return $items;
    
      } elseif($debug) {
    
        echo "Non riesco a leggere la directory : ".$directory."
    ";
    
      }
    
    }
    
    $items = readDirRecursive($directory, $filter, 0);
    
    echo "<pre>";
    print_r($items);
    echo "</pre>";
    
    ?>
    Se vuoi vedere il debug passa come 3 argomento 1.
    Il filtro viene effettuato sulle estensioni, e non su tutto il file.

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.