首页 > php文件操作 > php 目录递归遍历程序

php 目录递归遍历程序

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

<?php
class Finder {
    private $key;
    private $result;
    private $previewLen = 50;
    private $file_type = array(
        'html',
        'php',
        'htm',
        'txt'
    );
    function __construct($key) {
        $this->key = $key;
    }
    function find($folder) {
        $this->result = array();
        if (is_array($folder)) {
            foreach ($folder as $f) {
                $this->_find_in_folder($f);
            }
        } else {
            $this->_find_in_folder($folder, true);
        }
        return $this->result;
    }
    function _find_in_folder($folder, $bSub = false) {
        foreach (glob($folder . DIRECTORY_SEPARATOR . '*') as $f) {
            if (is_file($f)) {
                $extend = explode(".", $f);
                $type = strtolower(end($extend));
                if (in_array($type, $this->file_type)) {
                    $fd = file_get_contents($f);
                    $pos = strpos($fd, $this->key);
                    if ($pos !== false) {
                        $end = $pre = '...';
                        $pos-= floor($this->previewLen / 2);
                        if ($pos < 0) {
                            $pre = '';
                            $pos = 0;
                        }
                        $findata = substr($fd, $pos, $this->previewLen);
                        $findata = str_replace($this->key, '<span style="color:red">' . $this->key . '</span>', $findata);
                        $this->result[] = array(
                            'path' => $f,
                            'preview' => $pre . $findata . $end
                        );
                    }
                }
                continue;
            }
            if ($bSub && is_dir($f)) {
                $this->_find_in_folder($f, true);
            }
        }
    }
}
$cur_path = dirname(__FILE__);
if (isset($_GET['a'])) {
    $key = $_POST['key'];
    if (!$key) die('关键字不能为空');
    $cf = new Finder($key);
    $in_folder = array();
    $limit_folder = $_POST['limit_folder'];
    if ($limit_folder == 1) {
        if (!isset($_POST['folder']) || !$_POST['folder']) die('限定目录不能为空');
        $in_folder = $_POST['folder'];
        $ret = $cf->find($in_folder);
    } else {
        $ret = $cf->find($cur_path);
    }
    echo "搜索[$key]结果:<br />";
    if (!$ret) die('无');
    foreach ($ret as $p => $f) {
        echo "$p. t$f[path] => $f[preview] <br />n";
    }
    exit();
}
$folder = array();
function readFolder($path) {
    global $folder;
    $folder[] = $path;
    foreach (glob($path . DIRECTORY_SEPARATOR . '*') as $f) {
        if (is_dir($f)) {
            readFolder($f);
        }
    }
}
readFolder($cur_path);
$folder_op = array();
foreach ($folder as $path) {
    $folder_op[] = "<option value="$path">$path</option>";
}
$folder_op = implode($folder_op);
?>
<form action="?a=do" method="post"> 
搜索关键字:<input type="text" name="key" value=""><br /> 
搜索目录:<select name="folder[]" multiple="true"><?php echo $folder_op ?></select><br /> 
是否限定以上选择的目录:<input type="radio" name="limit_folder" value="1" />是 <input type="radio" name="limit_folder" value="0" checked="true" />否 
<input type="submit" value="搜索" />


本文地址:http://www.phprm.com/wenjian/fs5014.html

转载随意,但请附上文章地址:-)

标签:php目录递归 php遍历程序

发表留言