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
转载随意,但请附上文章地址:-)