Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 45
  1. #1

    Estrarre file da Directory e Sub

    Buon giorno tramite questo script, vorrei creare un menu tramite i file che estrapolo da una directory o sottodirectory etc etc.
    La principale può avere sia file che altre sotto cartelle,cosi come le altre cartelle potrebbero avere sia file che altre sottocartelle e via discorrendo...
    Ora, questo script, a mio modestissimo modo di capire, dovrebbe, a seconda del controllo capire se è una directory o se è un file,ma cosi non è...
    codice:
    1. MONITORAGGIO <?php $path="Monitoraggio/"; if (is_dir($path)) { if ($handle = opendir($path)) { /* Questa è la maniera corretta di eseguire un loop all'interno di una directory. */ echo "
      1. "; //vedo la cartella anno_2009/2010 while (false !== ($file = readdir($handle))) { if(($file != '.') && ($file != '..') && ($file != 'Thumbs.db')){ echo "
      2. <a href=\"javascript:void(0)\">".strtoupper(str_replace("_"," ",$file))."</a>"; $path2=$path.$file."/"; //submenu a cartelle if (is_dir($path2)) { if ($handle2 = opendir($path2)) { echo "
        1. "; //vedo la cartella mese while (false !== ($file2 = readdir($handle2))) { if(($file2 != '.') && ($file2 != '..') && ($file2 != 'Thumbs.db')){ echo "
        2. <a href=\"javascript:void(0)\">".strtoupper(str_replace("_"," ",$file2))."</a>"; $path3=$path2.$file2."/"; //submenu file if (is_dir($path3)) { if ($handle3 = opendir($path3)) { echo "
          1. "; //vedo i file while (false !== ($file3 = readdir($handle3))) { if(($file3 != '.') && ($file3 != '..') && ($file3 != 'Thumbs.db')){ echo "
          2. <a href=\"".$path3.$file3."\">".strtoupper(str_replace("_"," ",$file3))."</a>"; } } } } echo "
          "; } } } } echo "
        "; } } echo "
      "; closedir($handle); } } ?>
    In pratica questo è quello che potrei trovarmi di fronte:

    codice:
    Cartella1.1
    - file
    - Cartella1.2
       - file
       - Cartella1.3
          - file
          - Cartella1.4
    
    Cartella2.2
    - Cartella2.2.1
      - file
    - Cartella3.2.1
      - Cartella4.2.1
        - file
    Spero di essermi spiegato....
    Grazie mille e buona giornata

  2. #2
    direi che come prima cosa dovresti provare ad utilizzare le funzioni ricorsive, altrimenti ti ritroverai con un'ammasso di codice informe ed incomprensibile
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    in che modo Daniele?
    puoi farmi un'esempio per favore?
    Non so da dove iniziare :|

  4. #4
    avrei risolto, ma senza ricorsione...
    in pratica dopo ogni while inserisco questo controllo
    codice:
    echo "
    1. "; //vedo i file while (false !== ($file3 = readdir($handle3))) { if(($file3 != '.') && ($file3 != '..') && ($file3 != 'Thumbs.db')) { if(is_dir($path3.$file3)) { echo "
    2. <a href=\"javascript:void(0)\">".strtoupper(str_replace("_"," ",$file3))."</a>"; } else{ echo "
    3. <a href=\"".$path3.$file3."\">".strtoupper(str_replace("_"," ",$file3))."</a>3"; } } } echo "
    ";
    come si esegue una ricorsione?
    grazie mille :|

  5. #5
    schematicamente parlando

    Codice PHP:
    function check_dir($Path$Depth 0)
    {
        echo 
    "Directory: " $Path"
    \n"
    ;
        foreach(
    glob($Path "/*.*") as $subPath)
        {
            if (
    is_dir($subPath) === true)
            {
                
    check_dir($subPath$Depth+1);
            }
            else
            {
                echo 
    str_repeat(''$Depth) . "File: " $subPath "
    \n"
    ;
            }
        }
    }

    check_dir('Monitoraggio'); 
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Ma perche' on usate la funziona scandir???????

    C'e' e' bella funziona perfettamente e vi evita di scrivere parecchio codice.

    es

    Codice PHP:

    function dirExplorer$path $step $stepLimit )
    {
         
    // CASI BASE
         
    if( !file_exists($path) )
              return 
    "" ;
         if ( !
    is_dir($path) )
              return 
    "$path";
         if( 
    $step>$stepLimit )
              return 
    "recursion limit reached" ;

         
    // RICORSIONE
         
    $datas scandir($path) ;

         foreach( 
    $datas as $r )
         {
              
    $str .= dirExplorer$path."/".$r , ++$step $stepLimit ) ;
         }
         return 
    $str ;

    Et voila' una cosi' o cmq similare.

  7. #7
    niente da fare ragazzi...non ci riesco.
    ho fatto cosi, ma non mi tira fuori niente:
    codice:
    if (is_dir($path)) 
    				{
    					if ($handle = opendir($path)) 
    					{	
    						/* Questa è la maniera corretta di eseguire un loop all'interno di una directory. */
    						echo "
    1. "; while (false !== ($file = readdir($handle))) { if(($file != '.') && ($file != '..') && ($file != 'Thumbs.db')) { foreach(glob($path . "/*.*") as $subPath) { if(is_dir($subPath)===true) { echo "
    2. <a href=\"javascript:void(0)\">".strtoupper(str_replace("_"," ",$file))."</a>"; } else{ echo "
    3. <a href=\"".$path.$file."\">".strtoupper(str_replace("_"," ",$file))."</a>"; } } } } echo "
    "; closedir($handle); } }
    In questo modo, sia il file che la cartella che contiene un'altro file, me li vede come due file.

    in questo modo:

    codice:
    -Cartella1.1
      - file
      - cartella1.2(lo vede come file)

    mmma.... :|

  8. #8
    forse è il caso che tu dia una lettura a questo
    http://it.wikipedia.org/wiki/Ricorsione

    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Prova questo codice e vedi che succede ....

    Ovviamente provalo in locale.

    Codice PHP:

    <?php


    echo "<pre>" ;
    $asd "" ;
    dirExplorer"./" 20 ) ;
    echo 
    $asd;
    echo 
    "</pre>" ;

    function 
    dirExplorer$path $step $stepLimit )
    {
        
    $path trim($path);
        
        
    // Whitespaces
        
    $ws "";
        for( 
    $i=$i $step $i++ )
            
    $ws .= "-" ;
        
    $ws .= "|" ;
        
         
    // CASI BASE
         
    if( !file_exists($path) )
         { echo 
    "" ; return ; }
         if ( !
    is_dir$path ) )
         { echo 
    $ws."[f]".$path."\n" ; return; }
         if( 
    $step>$stepLimit )
         { echo 
    $ws."[X]".$path."\n" ; return ; }

        
    // Stampa valore attuale
        
    echo $ws."[D]".$path."\n";

         
    // RICORSIONE
         
    $datas scandir($path) ;
        
        
    // NewPath
        
    $npath $path ;
        
        if( 
    $npathstrlen($npath)-]=="/" )
            
    $npath substr$npath strlen($npath)-) ;
            
        foreach( 
    $datas as $r )
         {
             if( 
    $r!="." && $r!=".." )
                  
    dirExplorer$npath."/".$r , ++$step $stepLimit )."\n" ;
         }
    }



    ?>

  10. #10
    ti ringrazio anche se in ritardo, Virus, gli ho dato un'occhiata adesso dovrò assimilare e modificarlo un pochino, cmq sei stato mooolto gentile :|
    Ti auguro una buona giornata

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.