首页 > 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="搜索" />

</form>


文章链接:http://www.phprm.com/frame/php1005241.html

随便收藏,请保留本文地址!

标签:none

发表留言