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);//清內存
                }
            }
        }
    }
}
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章