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