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个人网站架设连环讲(三)
Oct 09 PHP
php 过滤危险html代码
Jun 29 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
php中session使用示例
Mar 29 PHP
简单的php新闻发布系统教程
May 09 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
php生成百度sitemap站点地图类函数实例
Oct 17 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
php匹配字符中链接地址的方法
Dec 22 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
php中的explode()函数实例介绍
Jan 18 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下正则来匹配dede模板标签的代码
2010/08/21 PHP
基于node.js的快速开发透明代理
2010/12/25 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
vue观察模式浅析
2018/09/25 Javascript
python复制文件代码实现
2013/12/23 Python
Python中的Numpy入门教程
2014/04/26 Python
用python制作游戏外挂
2018/01/04 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
python实现超市扫码仪计费
2018/05/30 Python
python 字符串追加实例
2019/07/20 Python
python输入错误后删除的方法
2019/10/12 Python
Django实现基于类的分页功能
2019/10/31 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
技校教师求职简历的自我评价
2013/10/20 职场文书
毕业实习个人鉴定范文
2013/12/10 职场文书
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
汇源肾宝广告词
2014/03/20 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
预备党员综合考察材料
2014/05/31 职场文书
化学教育专业自荐信
2014/07/04 职场文书
会计工作总结范文2014
2014/12/23 职场文书
2016公司年会通知范文
2015/04/25 职场文书
Python基础详解之邮件处理
2021/04/28 Python
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python