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
转载随意,但请附上文章地址:-)