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 相关文章推荐
用Socket发送电子邮件
Oct 09 PHP
PHP实现网上点歌(二)
Oct 09 PHP
关于BIG5-HKSCS的解决方法
Mar 20 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
Jun 28 PHP
php打开远程文件的方法和风险及解决方法
Nov 12 PHP
PHP扩展CURL的用法详解
Jun 20 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
微信支付扫码支付php版
Jul 22 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 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
PHP JSON 数据解析代码
2010/05/26 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
php实现用户登陆简单实例
2017/04/04 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
python中append函数用法讲解
2020/12/11 Python
python中pivot()函数基础知识点
2021/01/03 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
经典c++面试题六
2012/01/18 面试题
医学专业个人求职自荐信格式
2013/09/23 职场文书
生物专业个人自荐信范文
2013/11/29 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
利用Python实现Picgo图床工具
2021/11/23 Python