2010-03-07 32 views
8

tengo esta función para devolver el full directory tree:PHP ruta del directorio recursivo

function getDirectory($path = '.', $level = 0){ 

$ignore = array('cgi-bin', '.', '..'); 
// Directories to ignore when listing output. Many hosts 
// will deny PHP access to the cgi-bin. 

$dh = @opendir($path); 
// Open the directory to the handle $dh 

while(false !== ($file = readdir($dh))){ 
// Loop through the directory 

    if(!in_array($file, $ignore)){ 
    // Check that this file is not to be ignored 

     $spaces = str_repeat(' ', ($level * 4)); 
     // Just to add spacing to the list, to better 
     // show the directory tree. 

     if(is_dir("$path/$file")){ 
     // Its a directory, so we need to keep reading down... 

      echo "<strong>$spaces $file</strong><br />"; 
      getDirectory("$path/$file", ($level+1)); 
      // Re-call this same function but on a new directory. 
      // this is what makes function recursive. 

     } else { 

      echo "$spaces $file<br />"; 
      // Just print out the filename 

     } 

    } 

} 

closedir($dh); 
// Close the directory handle 

}

pero lo que quiero hacer es buscar un archivo/carpeta y volver su trayectoria, ¿cómo puedo ¿Haz eso? ¿Tiene esa función o puede darme algunos consejos sobre cómo hacer esto?

Respuesta

0

¿Tiene una función de este tipo o que me puede dar algunos consejos sobre cómo hacer esto?

Sí, lo hago.

De hecho, hice una pregunta similar esta mañana, pero lo averiguo. El problema que estaba teniendo es que los nombres de los archivos. y ... son devueltos por readdir() y causan problemas cuando intentan abrirse() con ellos. Cuando los filtré, mi recursividad funcionó perfectamente. Es posible que desee modificar el formato en el que genera los directorios que se ajustan a la búsqueda. O modifíquelo para generar todos los archivos y directorios. Encuentre una imagen para "go.jpg" y pruébelo.

No puedo encontrar mi publicación para notificar que encontré la solución.

define ('HOME', $_SERVER['DOCUMENT_ROOT']); 

    function searchalldirectories($directory, $seachterm, $maxrecursions, $maxopendir){ 
     $dircontent= ''; 
     $dirs= array(); 
     if ($maxopendir > 0){ 
      $maxopendir--; 
      $handle= opendir(HOME.'/'.$directory); 
      while (($dirlisting= readdir($handle)) !== false){ 
       $dn= ''; $fn= '&nbsp;&nbsp;File'; 
       if (is_dir(HOME.'/'.$directory.'/'.$dirlisting) && $maxrecursions>0 && strpos($dirlisting, '.')!==0){ 
        $dirs[ count($dirs)]= $directory.'/'.$dirlisting; 
        $dn= '/'; $fn= 'Dir'; 
       }       
       if (stripos($dirlisting, $seachterm) !== false){ 
        $dircontent.= '<input type="image" src="go.jpg" name="cmd" value="home:/'.$directory.'/'.$dirlisting.'"> '.$fn.':// <b>'.$directory.'/'.$dirlisting.$dn.'/</b><br>'; 
       } 
      } 
      closedir($handle); 
      for ($i=0; $i<count($dirs); $i++){ 
       $dircontent.= searchalldirectories($dirs[$i], $seachterm, ($maxrecursions-1), $maxopendir); 
      } 
     } 
     return $dircontent; 
    } 
Cuestiones relacionadas