首页 >后端开发 >php教程 > 正文

简单站内HTML文件搜索程序_PHP

原创2016-06-01 12:30:380503
  自己写来简单的搜索自己电脑上的技术资料的. 大概的思路就是寻找指定目录下的文本, 然后如果有与关键字相匹配的数据就把文件名返回, 最后把所有搜索结果显示出来. 显示结果类似于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>/i", $fileContent, $matchResult);<BR> $title = preg_replace(array("/(<title>)/i","/(<\/title>)/i"), "", $matchResult[0]);<BR> if (empty($title)) {<BR> return $default;<BR> } else {<BR> return $title;<BR> }<BR>}</P> <P>//获取文件描述信息<BR>function getFileDescribe($file,$length=200, $default="None describe")<BR>{<BR> $metas = get_meta_tags($file);<BR> if ($meta['description'] != "") {<BR> return $metas['description'];<BR> }<BR> $fileContent = getFileContent($file);<BR> preg_match("/(<body.*<\/body>)/is", $fileContent, $matchResult);<BR> $pattern = array("/(<[^\x80-\xff] >)/i","/(<input.*>) /i", "/(<a.*>) /i", "/(<img.*>) /i", "/([<script.*>]) .*([<\/script>]) /i","/&/i","/"/i","/'/i", "/\s/");<BR> $description = preg_replace($pattern, "", $matchResult[0]);<BR> $description = mb_substr($description, 0, $length)." ...";</P> <P> return $description;<BR>}</P> <P>//加亮搜索结果中的关键字<BR>function highLightKeyword($text, $keyword, $color="#C60A00")<BR>{<BR> $newword = "<font color=$color>$keyword</font>";<BR> $text = str_replace($keyword, $newword, $text);<BR> return $text;<BR>}</P> <P>//获取文件大小(KB)<BR>function getFileSize($file)<BR>{<BR> $filesize = intval(filesize($file)/1024)."K";<BR> return $filesize;<BR>}</P> <P>//获取文件最后修改的时间<BR>function getFileTime($file)<BR>{<BR> $filetime = date("Y-m-d", filemtime($file));<BR> return $filetime;<BR>}</P> <P>//搜索目录下所有文件<BR>function searchFile($dir, $keyword)<BR>{<BR> $sFile = getFile($dir);<BR> if (count($sFile) <= 0) {<BR> return false;<BR> }<BR> $sResult = array();<BR> foreach ($sFile as $file) {<BR> if (searchText($file, $keyword)) {<BR> $sResult[] = $file;<BR> }<BR> }<BR> if (count($sResult) <= 0) {<BR> return false;<BR> } else {<BR> return $sResult;<BR> }<BR>}</P> <P><BR>/* 测试代码 */</P> <P>//指定要搜索的目录<BR>$dir = "./php_Linux";<BR>//要搜索的关键字<BR>$keyword = "sendmail";</P> <P>$fileArr = searchFile($dir, $keyword);<BR>$searchSum = count($fileArr);</P> <P>echo "搜索关键字: <b>$keyword</b> 搜索目录: <b>$dir</b> 搜索结果: <b>$searchSum</b><br><hr size=1><br>";</P> <P>if ($searchSum <= 0) { <BR> echo "没有搜索到任何结果";<BR>} else {<BR> foreach ($fileArr as $file) {<BR> echo "<a href='$file' target='_blank'>". highLightKeyword(getFileTitle($file), $keyword) .<BR> "</a> - ".getFileSize($file)." ". getFileTime($file) .<BR> "<br>\n<font size=2>".highLightKeyword(getFileDescribe($file), $keyword) .<BR> "</font><br><br>";<BR> }<BR>}</P> <P>?></P> <P>  完全可以用在自己已经生成静态内容的的搜索, 但是程序效率不高. 如果能够适当的加上 索引/缓存 等机制的话, 我想程序会有趣很多.</span><div class='share layui-clear bdsharebuttonbox'><li ><a href='javascript:;' data-cmd="weixin" class='wechat'><i class="layui-icon"></i>微信</a></li><li ><a href='javascript:;' data-cmd="more" class='share-btn'><i class="layui-icon"></i>分享</a></li></div><img src="/static/images/article_wechat2021.jpg?1111" style="margin-top: 30px;" alt="php中文网最新课程二维码"/><!--<a href="//m.sbmmt.com/k.html" target="_blank"><img src="https://img.php.cn/upload/article/000/000/003/60d557b50f89a276.jpg" style="margin-top: 30px;" alt="php中文网直播班"/></a>--><p style="float:right;font-size:13px;color:#999;"><span class="red">声明:</span>本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理</p><div class='tags layui-clear'><li>相关标签:<a href="//m.sbmmt.com/search?word=程序" target="_blank">程序</a> <a href="//m.sbmmt.com/search?word=搜索" target="_blank">搜索</a> <a href="//m.sbmmt.com/search?word=文件" target="_blank">文件</a> <a href="//m.sbmmt.com/search?word=简单" target="_blank">简单</a> <a href="//m.sbmmt.com/search?word=file" target="_blank">file</a> <a href="//m.sbmmt.com/search?word=return" target="_blank">return</a> <a href="//m.sbmmt.com/search?word=" target="_blank"></a></li><li class='line'></li></div><div class='page layui-clear'><ul><li>上一篇:<a href="//m.sbmmt.com/php-weizijiaocheng-61141.html">PHP网站后门的隐藏技巧测试报告_PHP</a></li><li>下一篇:<a href="//m.sbmmt.com/php-weizijiaocheng-61143.html">Windows下的PHP5.0安装配制详解_PHP</a></li></ul></div></div><p class="article-relative-header">相关文章</p><p class="article-relative-header">相关视频</p><hr class="layui-clear"><ul class="article-relative-ul"><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/php-weizijiaocheng-483281.html" target="_blank">你知道这个PHP命令行选项解析库(pflag)吗?</a></li><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/php-weizijiaocheng-483303.html" target="_blank">带你看懂PHP中的class定义类与成员属性方法</a></li><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/php-weizijiaocheng-483280.html" target="_blank">PHP中如何才能将时间日期格式化?怎么计算时间差?</a></li><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/php-weizijiaocheng-483251.html" target="_blank">一定搞得懂PHP中如何添加图片水印</a></li><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/php-weizijiaocheng-61142.html">简单站内HTML文件搜索程序_PHP</a></li></ul><ul class="article-relative-ul"><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/code/297.html" target="_blank" title='AJAX 实时搜索'>AJAX 实时搜索</a></li><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/code/300.html" target="_blank" title='AJAX实时搜索'>AJAX实时搜索</a></li><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/code/339.html" target="_blank" title='PHP开发基础教程之AJAX实时搜索'>PHP开发基础教程之AJAX实时搜索</a></li><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/code/348.html" target="_blank" title='PHP 新手入门之AJAX实时搜索'>PHP 新手入门之AJAX实时搜索</a></li><li><span class="layui-badge-dots"></span><a class="relevant" href="//m.sbmmt.com/code/358.html" target="_blank" title='PHP 实例 - AJAX 实时搜索'>PHP 实例 - AJAX 实时搜索</a></li></ul><div class="layui-clear"></div></div><div class="comment layui-clear CopyrightData"><div class="J_Header" id="J_Header"><p class="header-title">网友评论</p><p class="header-protocol">文明上网理性发言,请遵守 <a href="javascript:void(0);">新闻评论服务协议</a></p><a class="article-comment-publish" href="javascript:void(0);">我要评论</a></div><div class="layui-row diy-page"></div><div class="text-box layui-clear article_comment_textarea" ><div class="box-left"><li><a href="javascript:login_trigger()"><img src="/static/images/user_avatar.jpg" alt=""></a></li><li><a href="javascript:login_trigger()"></a></li></div><div class="box-right"><textarea name="desc" placeholder="请输入内容" class="layui-textarea article_textarea"></textarea><button class="layui-btn article_publish" data-id="61142">立即提交</button></div></div></div><div class="article-hot layui-clear" style="margin-top:0"><h2>专题推荐</h2><ul><li><a href="//m.sbmmt.com/map/dugu.html" target="_blank"><img src="https://img.php.cn/upload/article/000/000/003/5d1ef1e9e866e635.jpg"></a><a class="course-title" href="//m.sbmmt.com/map/dugu.html" target="_blank">独孤九贱-php全栈开发教程</a><p class="course-type">全栈 <i class="layui-icon layui-icon-user"></i> 100W+</p><p class="course-des">主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门</p></li><li><a href="//m.sbmmt.com/map/yunv.html" target="_blank"><img src="https://img.php.cn/upload/article/000/000/003/5d1ef236ca878949.jpg"></a><a class="course-title" href="//m.sbmmt.com/map/yunv.html" target="_blank">玉女心经-web前端开发教程</a><p class="course-type">入门 <i class="layui-icon layui-icon-user"></i> 50W+</p><p class="course-des">主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门</p></li><li><a href="//m.sbmmt.com/toutiao-409221.html" target="_blank"><img src="https://img.php.cn/upload/article/000/000/003/5d1ef2477c7d7587.jpg"></a><a class="course-title" href="//m.sbmmt.com/toutiao-409221.html" target="_blank">天龙八部-实战开发教程</a><p class="course-type">实战 <i class="layui-icon layui-icon-user"></i> 80W+</p><p class="course-des">主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习</p></li></ul><div class="clear"></div></div></div><div class="layui-col-md4 article-list-right "><div class="panel"><div class="panel-title">作者信息</div><div id="profile-2"><div class="avatar-wrap"><a href="//m.sbmmt.com/member/1.html" target="_blank" class="avatar-link"><img src="/static/images/user_avatar.jpg" class="func-um_user gravatar avatar avatar-120 um-avatar um-avatar-uploaded"></a></div><div class="profile-info"><p><span class="author-name">php中文网</span><i class="layui-icon layui-icon-auz" title="认证作者"></i></p><p class="author-description">认证0级讲师</p></div></div></div><div class="layui-clear"><a href='javascript:publish_article()' class='layui-btn layui-btn-danger article-add'>发布技术文章</a></div><div class='top-article layui-clear'><div class="layui-tab layui-tab-card"><ul class="layui-tab-title"><li class="layui-this">最新文章</li><li>热门排行</li></ul><div class="layui-tab-content"><div class="layui-tab-item layui-show"><ul><!--<p class='top-img'><a href='//m.sbmmt.com/toutiao-387072.html' target="_blank" title='面对巨额亏损的PHP中文网,我该为情怀买单吗?(猪哥)'><img src='https://img.php.cn/upload/article/000/000/003/5b890a9e4417f872.png' style="width: 100%"></a></p><p class='top-img'><a href='//m.sbmmt.com/k.html' target="_blank" title='php中文网线上直播课'><img src='https://img.php.cn/upload/article/000/000/001/6035cab2b0ea1741.png' style="width: 100%"></a></p> --><p class='top-img'><!--<a href='//m.sbmmt.com/vip.html' target="_blank" title='VIP会员'><img src='https://img.php.cn/upload/article/000/000/003/5f4de931a5deb813.png' style="width: 100%"></a>--><a href='//m.sbmmt.com/k.html?t=2' target="_blank" title='线上直播班'><img src='https://img.php.cn/upload/article/000/000/003/612c790540fb9612.png' style="width: 100%"></a></p><li><a href='//m.sbmmt.com/php-weizijiaocheng-483308.html' target="_blank" title='PHP中怎样实例化对象并且访问对象成员?'>PHP中怎样实例化对象并且访问对象成员?</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-483303.html' target="_blank" title='带你看懂PHP中的class定义类与成员属性方法'>带你看懂PHP中的class定义类与成员属性方法</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-483291.html' target="_blank" title='PHP中自定义错误处理函数与错误屏蔽你会了吗?'>PHP中自定义错误处理函数与错误屏蔽你会了吗?</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-483285.html' target="_blank" title='最详细的教你PHP时间戳与日期时间的转换'>最详细的教你PHP时间戳与日期时间的转换</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-483281.html' target="_blank" title='你知道这个PHP命令行选项解析库(pflag)吗?'>你知道这个PHP命令行选项解析库(pflag)吗?</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-483280.html' target="_blank" title='PHP中如何才能将时间日期格式化?怎么计算时间差?'>PHP中如何才能将时间日期格式化?怎么计算时间差?</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-483279.html' target="_blank" title='PHP中获取时间的方法总结(实例详解)'>PHP中获取时间的方法总结(实例详解)</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-483278.html' target="_blank" title='PHP中应该怎样去完成时区的设置?'>PHP中应该怎样去完成时区的设置?</a></li></ul></div><div class="layui-tab-item"><ul><p class='top-img'><a href='//m.sbmmt.com/toutiao-387072.html' target="_blank" title='面对巨额亏损的PHP中文网,我该为情怀买单吗?(猪哥)'><img src='https://img.php.cn/upload/article/000/000/003/5b890a9e4417f872.png' style="width: 100%"></a></p><li><a href='//m.sbmmt.com/php-weizijiaocheng-255458.html' target="_blank" title='循环大量数据导致内存超出,不增加内存如何解决该问题'>循环大量数据导致内存超出,不增加内存如何解决该问题</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-413538.html' target="_blank" title='VPN是什么'>VPN是什么</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-393700.html' target="_blank" title='最全最详细的PHP面试题(带有答案)'>最全最详细的PHP面试题(带有答案)</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-386709.html' target="_blank" title='PHP四大主流框架的优缺点总结'>PHP四大主流框架的优缺点总结</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-209396.html' target="_blank" title='简略的php文件上传实例'>简略的php文件上传实例</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-448391.html' target="_blank" title='PHP快速搭建一个简单的QQ机器人'>PHP快速搭建一个简单的QQ机器人</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-448286.html' target="_blank" title='API常用签名验证方法(PHP实现)'>API常用签名验证方法(PHP实现)</a></li><li><a href='//m.sbmmt.com/php-weizijiaocheng-448309.html' target="_blank" title='PHP常用日期时间操作合集'>PHP常用日期时间操作合集</a></li></ul></div></div></div></div><div class='article-ad article-course php-news-right-imginfo'><div class='r-title'><i class='layui-icon layui-icon-praise'></i>推荐视频教程</div><li><a href='//m.sbmmt.com/course/179.html' target="_blank" ><img src='https://img.php.cn/upload/course/000/000/003/5a17982d48686254.jpg' alt="javascript初级视频教程" height='60'></a><span><a href='//m.sbmmt.com/course/179.html' target="_blank">javascript初级视频教程</a></span></li><li><a href='//m.sbmmt.com/course/181.html' target="_blank" ><img src='https://img.php.cn/upload/course/000/000/003/5a179283c3885703.jpg' alt="jquery 基础视频教程" height='60'></a><span><a href='//m.sbmmt.com/course/181.html' target="_blank">jquery 基础视频教程</a></span></li></div><div class='article-ad mt-20' id="aritcle_detail_new"><div class='r-title'><i class='layui-icon layui-icon-video'></i>视频教程分类</div><ul class='course-category-lists layui-clear'><li><a href="//m.sbmmt.com/course/list/29/type/2.html" target="_blank"><div class="course-category-child-first">php视频教程</div><div class='course-category-child'></div></a></li><li><a href="//m.sbmmt.com/course/list/11.html" target="_blank"><div class="course-category-child-first">html视频教程</div><div class='course-category-child'></div></a></li><li><a href="//m.sbmmt.com/course/list/12.html" target="_blank"><div class="course-category-child-first">css视频教程</div><div class='course-category-child'></div></a></li><li><a href="//m.sbmmt.com/course/list/17.html" target="_blank"><div class="course-category-child-first">JS视频教程</div><div class='course-category-child'></div></a></li><li><a href="//m.sbmmt.com/course/list/19.html" target="_blank"><div class="course-category-child-first">jQuery视频教程</div><div class='course-category-child'></div></a></li><li><a href="//m.sbmmt.com/course/list/51.html" target="_blank"><div class="course-category-child-first">mysql视频教程</div><div class='course-category-child'></div></a></li><li><a href="//m.sbmmt.com/course/list/33.html" target="_blank"><div class="course-category-child-first">Linux视频教程</div><div class='course-category-child'></div></a></li><li><a href="//m.sbmmt.com/course/list/30.html" target="_blank"><div class="course-category-child-first">Python视频教程</div><div class='course-category-child'></div></a></li></ul></div></div></div></div><!--技术文章--><script src="/static/ueditor/third-party/SyntaxHighlighter/shCore.js?3.1.1"></script><script>article_status = 0;</script><script type="text/javascript" src="/static/js/jquery.min.js"></script><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><iframe src="/ad1.html?14" frameborder="0" style="position: fixed;bottom:0;right:0;z-index:99999;"></iframe><!--<iframe src="/adapp.html?1" frameborder="0" style="position: fixed;bottom:0;right:0;z-index:99999;"></iframe>--><div class="layui-clear layui-bg-black php-ul-li footer_top_margin"><div class="layui-row layui-main" ><div class="layui-col-md9"><ul class="php-float-left"><li><a href="/" target="_blank" title="网站首页">网站首页 </a></li><li><a href="//m.sbmmt.com/course/list/29/type/2.html" target="_blank" title="PHP视频">PHP视频</a></li><li><a href="//m.sbmmt.com/course/list/29/type/4.html" target="_blank" title="PHP实战">PHP实战</a></li><li><a href="//m.sbmmt.com/course/list/29/type/1.html" target="_blank" title="PHP代码">PHP代码</a></li><li><a href="//m.sbmmt.com/course/list/29/type/3.html" target="_blank" title="PHP手册">PHP手册</a></li><li><a href="//m.sbmmt.com/wikis.html" target="_blank" title="词条">词条</a></li><li><a href="//m.sbmmt.com/write.html" target="_blank" title="手记">手记</a></li><li><a href="//m.sbmmt.com/dic.html" target="_blank" title="手记">编程词典</a></li><li><a href="//m.sbmmt.com/k.html" target="_blank">php培训</a></li></ul><p class="layui-clear footer_phpcn">php中文网:公益在线php培训,帮助PHP学习者快速成长!</p><p class="footer_phpcn_record">Copyright 2014-2021 //m.sbmmt.com/ All Rights Reserved | <a href="https://beian.miit.gov.cn/" style="color: #9c9c9c;" rel="nofollow" target="_blank">苏ICP备2020058653号-1</a><a href="http://112.30.63.109:8887/showEi?id=6a58f74d17984675aa1b671d0fa101cf&url=php.cn" rel="nofollow" target="_blank"><img src="/static/images/foot_line.gif" width="15"></a><span class="footer_phpcn_say" style="padding-left:15px;"><a href="//m.sbmmt.com/about/us.html" target="_blank">关于我们</a><a href="//m.sbmmt.com/about/disclaimer.html" target="_blank" class="mr10">免责申明</a><a href="//m.sbmmt.com/about/donate.html" class="mr10" target="_blank">赞助与捐赠</a><a href="//m.sbmmt.com/blog/detail/20304.html" target="_blank">广告合作</a></span></p></div><div class="layui-col-md3" style="padding-top:15px;"><img src="/static/images/phpcn_erwei.jpg" width="100">   <img src="/static/images/qq.jpg" width="100"></div></div></div><style>.layui-fixbar{bottom:200px;}</style><input type="hidden" id="verifycode" value="/captcha.html"><script src="/static/js/jquery.min.js"></script><script src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.min.js?5.4.93"></script><script>var _hmt = _hmt || [];(function(){var hm = document.createElement("script");hm.src="//m.sbmmt.com/hm.js?aaf8dba0861f46190106021371583c62";var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();(function(){var bp = document.createElement('script');var curProtocol = window.location.protocol.split(':')[0];if(curProtocol === 'https'){bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';}else{bp.src = 'http://push.zhanzhang.baidu.com/push.js';};var s = document.getElementsByTagName("script")[0];s.parentNode.insertBefore(bp, s);})();</script><script type="text/javascript" src="/static/js/jquery.cookie.js"></script><script>var topadshow = $.cookie('phpcndatatopadshows');if(!topadshow&&1==2){$('.topimages').show();var topobj = $('.topimages').find('.time');var topobj_day = $('.topimages .time').find('.day');var topobj_hours = $('.topimages .time').find('.hours');var topobj_minutes = $('.topimages .time').find('.minutes');var topobj_second = $('.topimages .time').find('.second');var topday = parseInt(topobj_day.html());var tophours = parseInt(topobj_hours.html());var topminutes = parseInt(topobj_minutes.html());var topsecond = parseInt(topobj_second.html());setInterval(function(){if(topsecond > 0){topsecond = topsecond-1;}else{if(topminutes > 0){topminutes = topminutes-1;topsecond = 59;}else{if(tophours > 0){tophours = tophours-1;topminutes = 59;topsecond = 59;}else{if(topday > 0){topday = topday -1;tophours = 23;topminutes = 59;topsecond = 59;}else{topobj.html("<p><span>活动已结束</span></p>");}}}}topobj_second.html(topsecond);topobj_minutes.html(topminutes);topobj_hours.html(tophours);topobj_day.html(topday);},1000);}$('.topimages .layui-icon-close').click(function(){$.cookie('phpcndatatopadshows',1,{expires:7});$('.topimages').hide();});</script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css?2' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>$('.content_article_viewer_show').viewer();</script></body></html>