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

    readdir che resituisce solo cartelle

    Ho bisogno di uno script che mi mostri solo le sottocartelle presenti in una determinata directory, ma non mi faccia vedere eventuali altri files.
    Codice PHP:
    // percorso della directory da leggere
    $directory "/path/";

    // apriamo la directory
    $open_handle opendir($directory);

    // impostiamo un ciclo while() per scorrere tutto il contenuto
    while( $read readdir($open_handle) ) 
      {
        if( (
    $read != ".") && 
            (
    $read != "..") &&
    // verifichiamo che non si tratti di files (se hanno le estensioni non lo metto)
            
    ( (!substr($read, -41) == ".") || (!substr($read, -51) == ".") )
          ) 
          {echo 
    $read "
    \n"
    ;}
      }

    closedir($open_handle); 
    Così mi mostra solo due delle cartelle effettivamente presenti, quelle che hanno nomi di tre lettere. Le altre due, che hanno nomi di 5 e 15 caratteri, non me li mostra.

    Dov'è che sbaglio?

  2. #2
    scusa la domanda stupida, perchè non usi readdir() leggendo anche i files e poi un bell'if da qualche parte tipo
    Codice PHP:
    if(is_dir($filechestoleggendo)) 
    echo 
    $filechestoleggendo
    Se no non stampi nulla Soluzione al volo, buon appetito
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  3. #3
    cioè?
    Non ho capito dove dovrei mettere il codice che mi suggerisci....

  4. #4
    Codice PHP:
    // percorso della directory da leggere
    $directory "/path/";

    // apriamo la directory
    $open_handle opendir($directory);

    // impostiamo un ciclo while() per scorrere tutto il contenuto
    while( $read readdir($open_handle) )
      {
        if( (
    $read != ".") && ($read != "..") && (is_dir($read)) ) // verifichiamo che non si tratti di files (se hanno le estensioni non lo metto)
          
    {echo $read "
    \n"
    ;}
      }

    closedir($open_handle); 
    Così dovrebbe stampare tutte e solo le cartelle tranne - ovviamente - i "." e ".."
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  5. #5
    Non funziona, anzi mi mostra solo una cartella e nemmeno più due

  6. #6
    Scusa, sono un po' rinco oggi... -.-
    L'ho rifatto da capo, senza la pretesa che funzioni, in un modo ancora diverso.. Prova un po' se funziona così, mi sembra un po' più pulito e comunque sarebbe più semplice trovare l'errore, concettuale o di sintassi che sia:
    Codice PHP:
    $directory "/percorso/della/directory/";
    $files scandir($directory);
    for(
    $i 0$i sizeof($files); $i++)
    {
        if(
    is_dir($files[$i]))
            echo 
    $files[$i];

    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  7. #7
    Nemmeno questo funzionava, allora ho trovato questo, che va alla grande
    Codice PHP:
    function scanDirectories($rootDir) {
        
    // set filenames invisible if you want
        
    $invisibleFileNames = array("."".."".htaccess"".htpasswd");
        
    // run through content of root directory
        
    $dirContent scandir($rootDir);
        
    $allData = array();
        
    // file counter gets incremented for a better
        
    $fileCounter 0;
        foreach(
    $dirContent as $key => $content) {
            
    // filter all files not accessible
            
    $path $rootDir.'/'.$content;
            if(!
    in_array($content$invisibleFileNames)) {

                  if(
    is_dir($path) && is_readable($path)) {
                    
    $dirNameArray explode('/',$path);
                    
    $allData[$path]['dirPath'] = $path;
                    
    $allData[$path]['dirName'] = end($dirNameArray);
                    
    // recursive callback to open new directory
                    
    $allData[$path]['content'] = scanDirectories($path);
                }
            }
        }
        return 
    $allData
    Sul manuale on-line

  8. #8
    Così funziona:
    Codice PHP:
    $a scanDirectories($_CONFIG['path_name']);
    foreach( 
    $a as $k=>$v)
          {
          foreach( 
    $v as $l=>$m
              {
              if(
    $l == 'dirName')
                {echo 
    "<h1>$m</h1>\n";}
              if(
    $l == 'content')
                {foreach(
    $m as $n=>$o)
                  {echo 
    "

    $n</p>\n";}
                }
          } 
    Ora però volevo provare a inserire un controllo per dire se non ci sono cartelle
    Ho provato ad aggiungere
    Codice PHP:
               else
                {echo 
    "

    Non sono presenti sottocartelle</p>\n"
    ;} 
    ma non va, perchè mi stampa la frase più volte.
    Io vorrei solo che, se non esiste un sotto array chiamato "content", mi stampa la frase. Isset non funziona...
    Idee?

  9. #9
    Codice PHP:
    <?php

    $DIRECTORY 
    "../"// Slash finale

    $arr glob($DIRECTORY  "*"GLOB_ONLYDIR);

    if(!empty(
    $arr))
        foreach (
    $arr as $filename) echo basename($filename) . "
    "
    ;
    else
        die(
    "Nessuna directory");
    ?>

  10. #10
    Codice PHP:
    $_CONFIG['path_name'] = "***********";

    /**
     * Recursive function to scan a directory with * scandir() *
     *
     * @param String $rootDir
     * @return multi dimensional array
     */
    function scanDirectories($rootDir) {
        
    // set filenames invisible if you want
        
    $invisibleFileNames = array("."".."".htaccess"".htpasswd");
        
    // run through content of root directory
        
    $dirContent scandir($rootDir);
        
    $allData = array();
        
    // file counter gets incremented for a better
        
    $fileCounter 0;
        foreach(
    $dirContent as $key => $content) {
            
    // filter all files not accessible
            
    $path $rootDir.'/'.$content;
            if(!
    in_array($content$invisibleFileNames)) {
                
    // if content is file & readable, add to array
    #            if(is_file($path) && is_readable($path)) {
    #                $tmpPathArray = explode("/",$path);
    #                // saving filename
    #                $allData[$fileCounter]['fileName'] = end($tmpPathArray);
    #                // saving while path (for better access)
    #                $allData[$fileCounter]['filePath'] = $path;
    #                // get file extension
    #                $filePartsTmp = explode(".", end($tmpPathArray));
    #                $allData[$fileCounter]['fileExt'] = end($filePartsTmp);
    #                // get file date
    #                $allData[$fileCounter]['fileDate'] = filectime($path);
    #                // get filesize in byte
    #                $allData[$fileCounter]['fileSize'] = filesize($path);
    #                $fileCounter++;
    #            // if content is a directory and readable, add path and name
    #            }elseif(is_dir($path) && is_readable($path)) { 
    ##la linea sotto va sostituita con quella prima se si usa lo script completo
                  
    if(is_dir($path) && is_readable($path)) {
                    
    $dirNameArray explode('/',$path);
                    
    $allData[$path]['dirPath'] = $path;
                    
    $allData[$path]['dirName'] = end($dirNameArray);
                    
    // recursive callback to open new directory
                    
    $allData[$path]['content'] = scanDirectories($path);
                }
            }
        }
        return 
    $allData;
    }

    $a scanDirectories($_CONFIG['path_name']);
    foreach( 
    $a as $k=>$v)
          {
          foreach( 
    $v as $l=>$m
              {
              if(
    $l == 'dirName')
                {echo 
    "<h1>$l -> $m</h1>\n";}
              if(
    $l == 'dirPath')
                {echo 
    "

    [b]
    $l -> $m"."/"."[/b]</p>\n";}
              if(
    $l == 'content')
                {echo 
    "

    $l -> $m</p>\n";}
              }
          echo 
    "<hr>";
          echo 
    "

    [b]
    $v[dirPath][/b]</p>";
          
    $directory $v['dirPath']."/"//Slash finale, altrimenti non va
          
    $arr glob($directory."*"GLOB_ONLYDIR);
          if( !empty(
    $arr) )
            {
            foreach(
    $arr as $filename
              {echo 
    "

    "
    .basename($filename)."</p>";}
            }
          else
            {echo 
    "

    Nessuna directory</p>"
    ;}
          echo 
    "<hr>";
          echo 
    "<hr>";
          } 
    Ecco, ho messo insieme i due script.
    Le parti della funzione scanDirectories commentati sono quelle parti che nella presente domanda non mi servivano, ma ovviamente risultano utili allorquando si volesse vedere tutto il contenuto della directory.

    Grazie degli aiuti, funziona benissimo!

    Solo una cosa
    Se lo lascio così, comunque lui stampa prima dirPath, poi dirName e infine content.
    Se io modifico l'ordine dello script, dovrebbe di conseguenza modificare l'ordine dell'output, vero? E c'è un modo per modificare l'ordine di uscita dell'output senza toccare lo script?

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.