网站地图    收藏   

主页 > php专栏 > php文件操作 >

php 目录递归遍历程序 - php文件操作

来源:自学PHP网    时间:2014-11-28 00:07 作者: 阅读:

[导读] 一个朋友写的一款目录查找程序,可以根据用户输入的目录名称查到到指定目录或文件,同时还支持锁定目录,有需要的朋友可以参考一下,代码如下:?phpclassFinder{private$key;private$result;private...

php 目录递归遍历程序

一个朋友写的一款目录查找程序,可以根据用户输入的目录名称查到到指定目录或文件,同时还支持锁定目录,有需要的朋友可以参考一下,代码如下:

  1. <?php 
  2. class Finder{ 
  3.  private $key
  4.  private $result
  5.  private $previewLen = 50; 
  6.  private $file_type = array('html','php','htm','txt'); 
  7.  
  8.  function __construct($key){ 
  9.   $this->key = $key
  10.  } 
  11.  
  12.  function find($folder){ 
  13.   $this->result = array(); 
  14.    
  15.   if(is_array($folder)){ 
  16.    foreach($folder as $f){ 
  17.     $this->_find_in_folder($f); 
  18.    } 
  19.   }else
  20.    $this->_find_in_folder($folder, true); 
  21.   } 
  22.  
  23.   return $this->result; 
  24.  } 
  25.  
  26.  function _find_in_folder($folder,$bSub=false){ 
  27.   foreach(glob($folder.DIRECTORY_SEPARATOR.'*'as $f){ 
  28.    if (is_file($f)){ 
  29.     $extend =explode("." , $f);  
  30.     $type = strtolower(end($extend)); 
  31.     if(in_array($type,$this->file_type)){ 
  32.      $fd = file_get_contents($f); 
  33.      $pos = strpos($fd,$this->key); 
  34.      if($pos!==false){ 
  35.       $end = $pre = '...'
  36.       $pos -= floor($this->previewLen/2); 
  37.       if($pos<0){ 
  38.        $pre = ''
  39.        $pos = 0; 
  40.       } 
  41.  
  42.       $findata = substr($fd,$pos,$this->previewLen); 
  43.       $findata = str_replace($this->key,'<span style="color:red">'.$this->key.'</span>',$findata); 
  44.       $this->result[] = array('path'=>$f,'preview'=>$pre.$findata.$end); 
  45.      } 
  46.     } 
  47.     continue
  48.    } 
  49.  
  50.    if($bSub && is_dir($f)){ 
  51.     $this->_find_in_folder($f,true); 
  52.    } 
  53.   } 
  54.  } 
  55.  
  56.  
  57. $cur_path = dirname(__FILE__); 
  58. if(isset($_GET['a'])){ 
  59.  $key = $_POST['key']; 
  60.  if(!$keydie('关键字不能为空'); 
  61.  
  62.  $cf = new Finder($key); 
  63.  
  64.  $in_folder = array(); 
  65.  $limit_folder = $_POST['limit_folder']; 
  66.  if($limit_folder==1){ 
  67.   if(!isset($_POST['folder']) || !$_POST['folder']) die('限定目录不能为空'); 
  68.   $in_folder = $_POST['folder']; 
  69.   $ret = $cf->find($in_folder); 
  70.  }else
  71.   $ret = $cf->find($cur_path); 
  72.  } 
  73.  
  74.  echo "搜索[$key]结果:<br />"
  75.  if(!$retdie('无'); 
  76.  foreach($ret as $p=>$f){ 
  77.   echo "$p. t$f[path] => $f[preview] <br />n"
  78.  } 
  79.  exit();  
  80.  
  81. $folder = array(); 
  82. function readFolder($path){ 
  83.  global $folder
  84.  $folder[] = $path
  85.  foreach(glob($path.DIRECTORY_SEPARATOR.'*'as $f){ 
  86.   if (is_dir($f)) { 
  87.    readFolder($f); 
  88.   } 
  89.  } 
  90.  
  91. readFolder($cur_path); 
  92. $folder_op = array(); 
  93. foreach($folder as $path){ 
  94.  $folder_op[] = "<option value="$path">$path</option>"
  95. }//开源代码phpfensi.com 
  96. $folder_op = implode($folder_op); 
  97. ?> 
  98. <form action="?a=do" method="post"
  99. 搜索关键字:<input type="text" name="key" value=""><br /> 
  100. 搜索目录:<select name="folder[]" multiple="true"><?php echo $folder_op ?></select><br /> 
  101. 是否限定以上选择的目录:<input type="radio" name="limit_folder" value="1" />是 <input type="radio" name="limit_folder" value="0" checked="true" />否 
  102. <input type="submit" value="搜索" /> 
  103. </form> 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论