php从文件夹中搜索关键字

php从文件夹中搜索关键字

php从文件夹中搜索关键字

介绍:通过一段php代码,在一个路径下搜索一个关键词,将含有该关键词的文件路径、文件标题等信息输出

<?php

set_time_limit("600");  //以秒为单位,所以是设10分钟为限
$keyword = trim($_POST["keyword"]);  //要搜索的关键字
if($keyword == ""){
    echo "您要搜索的关键字不能为空!<a href=../search/>返回</a>";
    exit(); //结束程序
}

//$dir是搜索的目录  $keyword是关键字  $array是存放的数组
//遍历所有文件
function listFiles($dir,$keyword,$array){
    global $array;  //把传过来的数组定义成全局的,在方法外面就能从数组里取到值了
    $handle = opendir($dir);
    while (false !== ($file = readdir($handle))){
        if ($file!="." && $file!="..")
        {
            //如果还是目录继续搜索
            if(is_dir("$dir/$file")){
                listFiles("$dir/$file",$keyword,$array);
            }else{
                //读取文件内容
                $data = fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
                //只在<body>和</body>之间搜索关键字,
                if (eregi("<body([^>]+)>(.+)</body>",$data,$b)){
                    $body = strip_tags($b["2"]);
                }else{
                    $body = strip_tags($data);
                }
                //不搜索自身
                if($file != "search.php"){
                    //是否匹配
                    if (eregi("$keyword",$body)){
                        //从搜索页面里提取出<title>和</title>里的内容,来作为标题
                        if (eregi("<title>(.+)</title>",$data,$m)){
                            $title = $m["1"];
                        }else{
                            $title = "没有标题";
                        }
                        //把搜索到的 标题和页面地址,存放到数组里
                        //$dir/$file  是搜索到的页面地址
                        $array[] = "$dir/$file $title";
                    }
                }
            }
        }
    }
}
//定义数组
$array = array();
//执行函数
listFiles(".","$keyword",$array); 
//打印搜索结果
foreach ($array as $value){
    //拆开
    list($filedir,$title) = split("[ ]",$value,"2");
    //输出
    echo "<a href=$filedir target=_blank>$title</a>" . "<br/>/n";
}

?>

简化版方案

<?php
set_time_limit(0);  //以秒为单位,所以是设10分钟为限
$keyword = 'col-md-9';  //要搜索的关键字
$dir=$_SERVER['DOCUMENT_ROOT'];

$array = array();//定义数组
listFiles($dir,$keyword,$array);//执行函数
print_r($array);

function listFiles($dir,$keyword,$array){
    set_time_limit(0);
    global $array;  //把传过来的数组定义成全局的,在方法外面就能从数组里取到值了
    $handle = opendir($dir);
    while (false !== ($file = readdir($handle)))
    {
        if ($file!="." && $file!="..")
        {
            if(is_dir("$dir/$file")){//如果还是目录继续搜索
                listFiles("$dir/$file",$keyword,$array);
            }else{
                $dax=filesize("$dir/$file");//获取文件大小
                if($dax>0)
                {
                    $data = fread(fopen("$dir/$file","r"),$dax);//读取文件内容
                    if($file != "0000.php")
                    {//不搜索自身
                        if(preg_match('/'.$keyword.'/i', $data)){//是否匹配
                            $array[] = "$dir/$file";
                        }
                    }
                    unset($data);//清内存
                }
            }
        }
    }
}
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜爱cpp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值