php实现遍历目录并删除指定文件中指定内容


Posted in PHP onJanuary 21, 2015

现在正坐在安静的寝室里,寒假俨然已经离我而去了……今天发的是我寒假里搞的最后一次学习,之后的时间就一直在看海贼王了。

以前写过一个C语言的遍历目录+复制文件的程序,很长很复杂,现在用PHP一样可以实现遍历目录,而代码就短了不少。这个程序目的是遍历目录,找到所有指定文件名的文件,并删除其中指定的字符串。

<?php

 //功能:删除指定目录(包括子目录)下所有指定文件中指定字符串
 $tmpfiledir = $_SERVER["DOCUMENT_ROOT"].'tmp.txt';

 function del($getstr)

 {

  $isbak = true; //是否备份原文件,true为备份,false不备份

  global $tmpfiledir;

  $fr = fopen($tmpfiledir,"r") or die('未能打开临时文件');

  while($row = fgets($fr))

  {

   if(empty($row)) break;

   $row = trim($row);

   $opp = fopen($row,"r") or die("未能打开$row");

   $str = fread($opp,filesize($row)) or die("不能读$row");

   $str = str_replace($getstr,"",$str);

   fclose($opp);

   if($isbak){

    copy($row,$row.'.bak') or die("备份文件失败");

    }

   $ref = fopen($row,"w") or die("重新打开文件失败");

   fwrite($ref,$str) or die("重新写入文件失败");

  }

 }

 

  function traverse($path) {

    global $name,$tmpfiledir;

   $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false

   if($current_dir == false) 

    return false;

   while(($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目

    $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径

    if($file == '.' || $file == '..') {

     continue;

    } else if(is_dir($sub_dir)) {    //如果是目录,进行递归

     traverse($sub_dir);

    } else {    //如果是文件,再做比较

     $fileinfo = pathinfo($sub_dir);

     if($fileinfo['basename'] == $name)

     {

       $fopen = fopen($tmpfiledir,"a");

       fwrite($fopen,$sub_dir."\r\n");

       fclose($fopen);

      }

    }

   }

   return true;

  }

  

  if(isset($_POST["name"]) && isset($_POST["dir"]) && isset($_POST["str"]))

  {

    $name = $_POST["name"];

    traverse($_POST["dir"]) or die("未能创建临时文件,请检查网站根目录是否可写");

    del($_POST["str"]);

             echo "成功";

    unlink($tmpfiledir);

   }

   else 

   {

     echo "<p>输入相关信息</p>";

    }

?>

<form name="input" action="" method="post">

输入目标文件夹:<input type="text" name="dir"/>

输入目标文件名:<input type="text" name="name"/>

输入需要删除的字符串:<input type="text" name="str" />

<input type="submit" value="提交" />

</form>

php实现遍历目录并删除指定文件中指定内容

你们可以看到我写了两个函数,函数traverse将查找到的指定文件路径写在一个临时文件里,函数del删除这些文件里的指定字符串。其实我也觉得很鸡肋,直接在遍历的时候删除就可以了,根本不用生成什么临时文件。

其实我一开始是用C语言写好的遍历,因为C语言不好对文件操作所以才用php写删除的部分,所以一开始只写了一个del函数,后来干脆把遍历文件也用php写了(似乎比C简单的多),所以又写了一个函数traverse。大家只管看遍历的部分就成,也可以和我之前用C写的遍历的代码对比(我发了源代码的),看看有什么不同。

不过这个版本不支持通配符,所以文件名必须要指定。作用嘛(也是我写这个的理由),可以批量删除我们挂在服务器上的一句话木马。

PHP 相关文章推荐
php&amp;java(一)
Oct 09 PHP
php文件操作实例代码
May 10 PHP
提高php运行速度的一些小技巧分享
Jul 03 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
php简单备份与还原MySql的方法
May 09 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
PHP的PDO连接讲解
Jan 24 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
Codeigniter的一些优秀特性总结
Jan 21 #PHP
PHP 生成N个不重复的随机数
Jan 21 #PHP
PHP 实现判断用户是否手机访问
Jan 21 #PHP
PHP中imagick函数的中文解释
Jan 21 #PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 #PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 #PHP
PHP中让curl支持sock5的代码实例
Jan 21 #PHP
You might like
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
JS 图片缩放效果代码
2010/06/09 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
VUE重点问题总结
2018/03/19 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
python中input()与raw_input()的区别分析
2016/02/27 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python内置函数OCT详解
2016/11/09 Python
python如何实现int函数的方法示例
2018/02/19 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
python后端接收前端回传的文件方法
2019/01/02 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
安装python及pycharm的教程图解
2019/10/10 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
Python requests模块session代码实例
2020/04/14 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
关于Python错误重试方法总结
2021/01/03 Python
python解包概念及实例
2021/02/17 Python
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
批评与自我批评材料
2014/02/15 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书