自己写来简单的搜索自己电脑上的技术资料的. 大概的思路就是寻找指定目录下的文本, 然后如果有与关键字相匹配的数据就把文件名返回, 最后把所有搜索结果显示出来. 显示结果类似于baidu/google, 呵呵, 这个是纯粹为了好玩. 程序代码: /** * 文件: search.php * 功能: 搜索指定目录下的HTML文件 * 创建: 2005-9-23 * 作者: heiyeluren */ /* 基本函数 */ //获取目录下文件函数 function getFile($dir) { $dp = opendir($dir); $fileArr = array(); while (!false == $curFile = readdir($dp)) { if ($curFile!="." && $curFile!=".." && $curFile!="") { if (is_dir($curFile)) { $fileArr = getFile($dir."/".$curFile); } else { $fileArr[] = $dir."/".$curFile; } } } return $fileArr; } //获取文件内容 function getFileContent($file) { if (!$fp = fopen($file, "r")) { die("Cannot open file $file"); } while ($text = fread($fp, 4096)) { $fileContent .= $text; } return $fileContent; } //搜索指定文件 function searchText($file, $keyword) { $text = getFileContent($file); if (preg_match("/$keyword/i", $text)) { return true; } return false; } //搜索出文章的标题 function getFileTitle($file, $default="None subject") { $fileContent = getFileContent($file); $sResult = preg_match("/ $title = preg_replace(array("/( if (empty($title)) { return $default; } else { return $title; } } //获取文件描述信息 function getFileDescribe($file,$length=200, $default="None describe") { $metas = get_meta_tags($file); if ($meta['description'] != "") { return $metas['description']; } $fileContent = getFileContent($file); preg_match("/( $pattern = array("/(<[^\x80-\xff]+>)/i","/( $description = preg_replace($pattern, "", $matchResult[0]); $description = mb_substr($description, 0, $length)." ..."; return $description; } //加亮搜索结果中的关键字 function highLightKeyword($text, $keyword, $color="#C60A00") { $newword = "$keyword"; $text = str_replace($keyword, $newword, $text); return $text; } //获取文件大小(KB) function getFileSize($file) { $filesize = intval(filesize($file)/1024)."K"; return $filesize; } //获取文件最后修改的时间 function getFileTime($file) { $filetime = date("Y-m-d", filemtime($file)); return $filetime; } //搜索目录下所有文件 function searchFile($dir, $keyword) { $sFile = getFile($dir); if (count($sFile) <= 0) { return false; } $sResult = array(); foreach ($sFile as $file) { if (searchText($file, $keyword)) { $sResult[] = $file; } } if (count($sResult) <= 0) { return false; } else { return $sResult; } } /* 测试代码 */ //指定要搜索的目录 $dir = "./php_Linux"; //要搜索的关键字 $keyword = "sendmail"; $fileArr = searchFile($dir, $keyword); $searchSum = count($fileArr); echo "搜索关键字: $keyword 搜索目录: $dir 搜索结果: $searchSum "; if ($searchSum <= 0) { echo "没有搜索到任何结果"; } else { foreach ($fileArr as $file) { echo "". highLightKeyword(getFileTitle($file), $keyword) . " - ".getFileSize($file)." ". getFileTime($file) . " \n".highLightKeyword(getFileDescribe($file), $keyword) . " "; } } ?> 完全可以用在自己已经生成静态内容的的搜索, 但是程序效率不高. 如果能够适当的加上 索引/缓存 等机制的话, 我想程序会有趣很多. |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 23:37 , Processed in 0.156589 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.