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);//清內存
}
}
}
}
}
?>