首页 > php文件操作 > php文件名与文件内容查找器实例

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>&nbsp;起始根路径:</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>&nbsp;文件扩展名:</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%">&nbsp;查找内容:</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

转载随意,但请附上文章地址:-)

标签:php文件名 文件内容查找器

发表留言