zoukankan      html  css  js  c++  java
  • 简单站内HTML文件搜索程序

    简介:这是简单站内HTML文件搜索程序的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=324005' scrolling='no'>

      自己写来简单的搜索自己电脑上的技术资料的. 大概的思路就是寻找指定目录下的文本, 然后如果有与关键字相匹配的数据就把文件名返回, 最后把所有搜索结果显示出来. 显示结果类似于baidu/google, 呵呵, 这个是纯粹为了好玩.

      程序代码:

    <?php
    /**
    * 文件: search.php
    * 功能: 搜索指定目录下的HTML文件
    * 创建: 2005-9-23
    * 作者: heiyeluren <heiyeluren AT gmail.com>
    */


    /* 基本函数 */

    //获取目录下文件函数
    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>.*<\/title>/i", $fileContent, $matchResult);
    $title = preg_replace(array("/(<title>)/i","/(<\/title>)/i"), "", $matchResult[0]);
    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("/(<body.*<\/body>)/is", $fileContent, $matchResult);
    $pattern = array("/(<[^\x80-\xff] >)/i","/(<input.*>) /i", "/(<a.*>) /i", "/(<img.*>) /i", "/([<script.*>]) .*([<\/script>]) /i","/&amp;/i","/&quot;/i","/&#039;/i", "/\s/");
    $description = preg_replace($pattern, "", $matchResult[0]);
    $description = mb_substr($description, 0, $length)." ...";

    return $description;
    }

    //加亮搜索结果中的关键字
    function highLightKeyword($text, $keyword, $color="#C60A00")
    {
    $newword = "<font color=$color>$keyword</font>";
    $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 "搜索关键字: <b>$keyword</b> &nbsp; 搜索目录: <b>$dir</b> &nbsp; 搜索结果: <b>$searchSum</b><br><hr size=1><br>";

    if ($searchSum <= 0) {
    echo "没有搜索到任何结果";
    } else {
    foreach ($fileArr as $file) {
    echo "<a href='$file' target='_blank'>". highLightKeyword(getFileTitle($file), $keyword) .
    "</a> - ".getFileSize($file)."&nbsp;". getFileTime($file) .
    "<br>\n<font size=2>".highLightKeyword(getFileDescribe($file), $keyword) .
    "</font><br><br>";
    }
    }

    ?>

      完全可以用在自己已经生成静态内容的的搜索, 但是程序效率不高. 如果能够适当的加上 索引/缓存 等机制的话, 我想程序会有趣很多.

    “简单站内HTML文件搜索程序”的更多相关文章 》

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/324005.html pageNo:15
  • 相关阅读:
    前缀和
    B. Ilya and Queries
    BZOJ1652 [Usaco2006 Feb]Treats for the Cows
    NOIP2014提高组 酱油记
    NOIP初赛 BLESS ALL!
    BZOJ1096 [ZJOI2007]仓库建设
    BZOJ1036 [ZJOI2008]树的统计Count
    BZOJ1030 [JSOI2007]文本生成器
    BZOJ2749 [HAOI2012]外星人
    BZOJ1093 [ZJOI2007]最大半连通子图
  • 原文地址:https://www.cnblogs.com/ooooo/p/2255004.html
Copyright © 2011-2022 走看看