php文件名与文件内容查找器实例
php文件查找程序,输入一个路径确定后会遍历目录下所有的文件和文件夹,通过递归可以找到文件夹下面的每一个文件,再通过文件名和输入的关键字匹配,则可以查找到你想要的文件,对于本地,我们可以利用windows自带的查找去进行查找,但是对于线上的话,如查找ftp空间里面文件,本程序是很有用的.
php文件查找器源码,代码如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>php版文件查找(file search)</title> </head> <body> <form action="" method="post"> <p> 文件查找(注:区分大小写)</p> <p>路径:<input type="text" name="path" /></p> <p>查找:<input type="text" name="key" /></p> <p><input type="submit" name="sub" value=" 开 始 " /></p> </form> </body> </html>
<?php /* * 注:区分大小写 */ if (!emptyempty($_POST['path']) && !emptyempty($_POST['key'])) { echo "在路径 " . $_POST['path'] . "/ 中查找 " . $_POST['key'] . " 的结果为:<hr/>"; $file_num = $dir_num = 0; $r_file_num = $r_dir_num = 0; $findFile = $_POST['key']; function delDirAndFile($dirName) { if ($handle = @opendir("$dirName")) { while (false !== ($item = readdir($handle))) { if ($item != "." && $item != "..") { if (is_dir("$dirName/$item")) { delDirAndFile("$dirName/$item"); } else { $GLOBALS['file_num']++; if (strstr($item, $GLOBALS['findFile'])) { echo " <span><b> $dirName/$item </b></span><br />n"; $GLOBALS['r_file_num']++; } } } } closedir($handle); $GLOBALS['dir_num']++; if (strstr($dirName, $GLOBALS['findFile'])) { $loop = explode($GLOBALS['findFile'], $dirName); $countArr = count($loop) - 1; if (emptyempty($loop[$countArr])) { echo " <span style='color:#297C79;'><b> $dirName </b></span><br />n"; $GLOBALS['r_dir_num']++; } } } else { die("没有此路径!"); } } delDirAndFile($_POST['path']); echo "<hr/>本次共搜索到" . $file_num . "个文件,文件夹" . $dir_num . "个<br/>"; echo "<hr/>符合结果的共" . $r_file_num . "个文件,文件夹" . $r_dir_num . "个<br/>"; } ?>
上面只是查找文件,下面看一个查找文件中的字符是否包括我们要找的东西,自己写的一个批量查找文件内容的php程序,我是拿来扫描文件特征码的,现在我贴出代码,供大家参考,代码如下:
<?php if ($_POST['Submit'] == '开始') { $total = 0; //文件总数 $dangerous = array(); //危险文件 $dangerous_content = $_POST["sstr"]; $find_path = $_POST["searchpath"]; $shortname = $_POST["shortname"]; echo "<!DOCTYPE html>"; echo "<html>"; echo "<head>"; echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"; echo "</head>"; echo "<body>"; $begin_time = date("U"); // $dangerous_content = "小亮,Root_GP,Root_CSS,c99sh_updateurl,c99sh_sourcesurl,640684770"; visitFile($find_path, $shortname); $end_time = date("U"); foreach ($dangerous as $d) { echo $d . "<br/>"; } echo "查找文件总数:" . $total . " 危险文件:" . count($dangerous) . " 总用时" . ($end_time - $begin_time) . "秒"; echo "</body>"; echo "</html>"; //if (! empty ( $dangerous )) { //foreach ( $dangerous as $dan ) { //echo "[error]" . $dan . "<br/>"; //} //} exit(); } function visitFile($path, $ext) { global $total; global $dangerous_content; $fdir = dir($path); //echo "Handle: " . $d->handle . "<br>"; // echo "Path: " . $fdir->path . "<br>"; set_time_limit(24 * 60 * 60); while (($entry = $fdir->read()) !== false) { $pathSub = $path . "" . $entry; if ($entry != '.' && $entry != '..') { if (is_dir($pathSub)) { visitFile($pathSub, $ext); } else { $exten = explode('.', $entry); $exten = array_reverse($exten); //把上面数组倒序 // foreach () $shortnames = explode('|', $ext); foreach ($shortnames as $sn) { if (!emptyempty($exten) && $sn == $exten[0]) { $total = $total + 1; //echo "开始分析文件:".$path."/".$entry . "<br>"; $content = file_get_contents($path . "/" . $entry); //这个性能较好 $content = strtolower($content); //全部转为小写 $dangerous_content = strtolower($dangerous_content); //全部转为小写 isExists($dangerous_content, $path . "/" . $entry, $content); //这个方法太耗内存了,希望有高手能解决一下 } } //sleep(1); } } } $fdir->close(); } function isExists($str, $filename, $content) { global $dangerous; //sleep ( 1 ); set_time_limit(10); $arr = explode(',', $str); $signature = "特征码:"; if (!emptyempty($arr)) { // $content = file_get_contents ( $filename ); //这个性能较好 $content = strtolower($content); //全部转为小写 $error_count = 0; foreach ($arr as $a) { if (trim($a) != "") { if (strpos($content, $a)) { $error_count = $error_count + 1; $signature.= $a . " "; } } } if ($error_count > 0) { // $dangerous [] = $filename; $dangerous[] = "[error] " . $error_count . " " . $signature . " " . $filename; //echo "[error] " . $error_count . " " .$signature." " . $filename . "<br/>"; } else { //echo "[ok] " . $filename . "<br/>"; } } } ?>
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>批量查询文件</title> <style type="text/css"> body { background: #FFFFFF; color: #000; font-size: 12px; } #top { text-align: center; } h1,p,form { margin: 0; padding: 0; } h1 {font-size; 14px; } </style> </head> <body> <div id="top"> <h1>批量查找程序</h1> <div>本程序可以扫描指定目录的所有文件,进行<strong>内容查找</strong>。<br /> 在文件数量非常多的情况下,本操作比较占用服务器资源,请确脚本超时限制时间允许更改,否则可能无法完成操作。</div> </div> <form action="<?php echo $_SERVER['SCRIPT_NAME'] ?>" name="form1" target="stafrm" method="post"> <table width="95%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#666666"> <tr> <td width="10%" bgcolor="#FFFFFF"><strong> 起始根路径:</strong></td> <td width="90%" bgcolor="#FFFFFF"><input name="searchpath" type="text" id="searchpath" value="D:/" size="20" /> 点表示当前目录,末尾不要加/ </td> </tr> <tr> <td bgcolor="#FFFFFF"><strong> 文件扩展名:</strong></td> <td bgcolor="#FFFFFF"><input name="shortname" type="text" id="shortname" size="20" value="htm|html|shtml|php" /> 多个请用|隔开</td> </tr> <tr id="rpct"> <td height="64" colspan="2" bgcolor="#FFFFFF"> <table width="100%" border="0" cellspacing="1" cellpadding="1"> <tr bgcolor="#EDFCE2"> <td colspan="4"><strong>内容查找选项:</strong> <input type="checkbox" name="isreg" value="1" />使用正则表达式</td> </tr> <tr> <td colspan="4">查找内容类默认使用字符串查找,也可以使用正则表达式(需勾选)。"查找为"不填写的话,就表示删除"查找内容"。 <br />com,system,exec,eval,escapeshell,cmd,passthru,base64_decode,gzuncompress </td> </tr> <tr> <td width="10%"> 查找内容:</td> <td width="36%" colspan="3"><textarea name="sstr" id="sstr" style="width: 90%; height: 45px">小亮,Root_GP,Root_CSS,c99sh_updateurl,c99sh_sourcesurl,640684770,hx_dealdir,while(1)</textarea></td> </tr> </table> </td> </tr> <tr> <td colspan="2" height="20" align="center" bgcolor="#E2F5BC"><input type="submit" name="Submit" value="开始" class="inputbut" /></td> </tr> </table> </form> <table width="95%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#666666"> <tr bgcolor="#FFFFFF"> <td id="mtd"> <div id='mdv' style='width: 100%; height: 100;'><iframe name="stafrm" frameborder="0" id="stafrm" width="100%" height="100%"></iframe></div> <script type="text/javascript"> document.all.mdv.style.pixelHeight = screen.height - 450; </script></td> </tr> </table> </body> </html>
本文地址:http://www.phprm.com/wenjian/fs3607.html
转载随意,但请附上文章地址:-)