设为首页收藏本站

思新社区 -谢新阳

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 433|回复: 0

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

[复制链接]
我的人缘1

  离线 

  • TA的每日心情
    无聊
    2016-4-26 09:28
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    74

    主题

    101

    帖子

    940

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    940
    发表于 2016-5-26 15:23:07 | 显示全部楼层 |阅读模式
    1. <?php
    2. //功能:删除指定目录(包括子目录)下所有指定文件中指定字符串

    3. $tmpfiledir = $_SERVER["DOCUMENT_ROOT"].'tmp.txt';
    4. function del($getstr)
    5. {
    6.   $isbak = true; //是否备份原文件,true为备份,false不备份
    7.   global $tmpfiledir;
    8.   $fr = fopen($tmpfiledir,"r") or die('未能打开临时文件');
    9.   while($row = fgets($fr))
    10.   {
    11.    if(empty($row)) break;
    12.    $row = trim($row);
    13.    $opp = fopen($row,"r") or die("未能打开$row");
    14.    $str = fread($opp,filesize($row)) or die("不能读$row");
    15.    $str = str_replace($getstr,"",$str);
    16.    fclose($opp);
    17.    if($isbak){
    18.     copy($row,$row.'.bak') or die("备份文件失败");
    19.     }
    20.    $ref = fopen($row,"w") or die("重新打开文件失败");
    21.    fwrite($ref,$str) or die("重新写入文件失败");
    22.   }
    23. }

    24.   function traverse($path) {
    25.     global $name,$tmpfiledir;
    26.    $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false
    27.    if($current_dir == false)
    28.     return false;
    29.    while(($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目
    30.     $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径
    31.     if($file == '.' || $file == '..') {
    32.      continue;
    33.     } else if(is_dir($sub_dir)) {    //如果是目录,进行递归
    34.      traverse($sub_dir);
    35.     } else {    //如果是文件,再做比较
    36.      $fileinfo = pathinfo($sub_dir);
    37.      if($fileinfo['basename'] == $name)
    38.      {
    39.        $fopen = fopen($tmpfiledir,"a");
    40.        fwrite($fopen,$sub_dir."\r\n");
    41.        fclose($fopen);
    42.       }
    43.     }
    44.    }
    45.    return true;
    46.   }

    47.   if(isset($_POST["name"]) && isset($_POST["dir"]) && isset($_POST["str"]))
    48.   {
    49.     $name = $_POST["name"];
    50.     traverse($_POST["dir"]) or die("未能创建临时文件,请检查网站根目录是否可写");
    51.     del($_POST["str"]);
    52.              echo "成功";
    53.     unlink($tmpfiledir);
    54.    }
    55.    else
    56.    {
    57.      echo "<p>输入相关信息</p>";
    58.     }
    59. ?>
    60. <form name="input" action="" method="post">
    61. 输入目标文件夹:<input type="text" name="dir"/>
    62. 输入目标文件名:<input type="text" name="name"/>
    63. 输入需要删除的字符串:<input type="text" name="str" />
    64. <input type="submit" value="提交" />
    65. </form>
    复制代码

    们可以看到我写了两个函数,函数traverse将查找到的指定文件路径写在一个临时文件里,函数del删除这些文件里的指定字符串。其实我也觉得很鸡肋,直接在遍历的时候删除就可以了,根本不用生成什么临时文件。其实我一开始是用C语言写好的遍历,因为C语言不好对文件操作所以才用php写删除的部分,所以一开始只写了一个del函数,后来干脆把遍历文件也用php写了(似乎比C简单的多),所以又写了一个函数traverse。大家只管看遍历的部分就成,也可以和我之前用C写的遍历的代码对比(我发了源代码的),看看有什么不同。
    不过这个版本不支持通配符,所以文件名必须要指定。作用嘛(也是我写这个的理由),可以批量删除我们挂在服务器上的一句话。



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x



    上一篇:PHP面试问题总结
    下一篇:php实现的支持断点续传的文件下载类
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

     
     
    技术支持
    在线客服
    点击这里给我发消息
    点击这里给我发消息
    38小屋
    工作时间:
    8:00-18:00
     

    QQ|Archiver|手机版|小黑屋|sltin ( 16010891 )  

    GMT+8, 2018-11-13 06:56 , Processed in 0.028663 second(s), 27 queries , Memcache On.

    Powered by sltin!

    淘宝旺旺: 淘宝旺旺 xie983600849

    快速回复 返回顶部 返回列表