任意php文件,把最后一行替换成自己的目录 即可

<?php

class KillBom
{
    public static $m_Ext = ['txt', 'php', 'js', 'css'];//检查的扩展名
    /**
     * 传入一个任意文件 ,自动区分定义的扩展名,然后过滤bom
     * @param string $file
     * @return boolean
     */
    public static  function killBomByFile($file)
    {
        $ext = pathinfo($file,PATHINFO_EXTENSION);//获取一个文件 的扩展名
        if (in_array($ext, self::$m_Ext) and  is_file($file))//允许被替换,而且是个文件 (不是目录 )
        {
            $content = file_get_contents($file);//取出文件 详情
         
            if (substr($content, 0, 3) == chr(0xEF) . chr(0xBB) . chr(0xBF))//EFBBBF 检查bom
            {
                return file_put_contents($file, substr($content, 3)) > 0;//清除bom并写入文件
            }
        }
        return false;
    }
    /**
     * 遍历获取子目录 及文件夹
     * @param string $dir
     * @return string[]
     */
    public static function  getFileListByDir($dir)
    {
        $dir_handle = opendir($dir);//打开文件
        $result = [];//存结果
        while ($file = readdir($dir_handle))//不断读取目录
        {
            if ($file != '.' and $file != '..')//不是本,上级目录
            {
                $file = $dir . DIRECTORY_SEPARATOR . $file;//组装成文件的绝对路径
                if (is_dir($file))//是目录 的话
                {
                    $result = array_merge($result ,  self::getFileListByDir($file));//递归并合并结果
                } else {
                    $result[] = $file;//记录结果
                }
            }
        }
        return $result;//返回结果
    }
    /**
     * 清空目录 下所有的bom头文件
     * @param string $dir
     */
    public static function killDir($dir)
    {
        $files = self::getFileListByDir($dir);//先找到所有文件
        foreach ($files as $file)//遍历
        {
            if (!self::killBomByFile($file))//干掉
            {
                echo $file .' -> no bom! <br>'.chr(13);//结果
            } else {
                echo $file . ' -> bom is killed! <br>'.chr(13);//结果
            }
        }
         
    }
}
//把下面这行替换成自己的目录
KillBom::killDir('您的目录');

最新文章

  1. 给一个div绝对定位后,如何让它水平居中
  2. 匈牙利命名法,骆驼命名法(camel),帕斯卡(Pascal)命名法(转)
  3. 深入理解Java虚拟机
  4. C#应用Newtonsoft.Json操作json
  5. GitHub使用教程for VS2012
  6. JavaScript的OOP编程2
  7. 执​行​o​r​a​c​l​e​函​数​的​四​种​方​法
  8. linux教程之四
  9. Linux系统学习笔记:文件I/O
  10. Playground中格式注释语法
  11. linux 使用技巧 screen 管理你的远程桌面的会话创建和使用
  12. Ubuntu18.04安装mysql5.7
  13. 教你如何让数据库支持emoji表情符存储
  14. linux笔记-多服务器同时执行相同命令
  15. vba编程基础2
  16. SQL:多表联合更新
  17. Java实验报告(实验五)
  18. 解决jar格式文件,双击不能直接运行问题
  19. 私有IP地址共有三个范围段
  20. Cocos2d-x Touch事件处理机制

热门文章

  1. LeetCode 605. Can Place Flowers (可以种花)
  2. LeetCode 226. Invert Binary Tree (反转二叉树)
  3. iOS下OpenCV开发用OC还是Swift
  4. vue2.0实现在table中实现全选和反选
  5. Problem N
  6. AngularJS学习篇(六)
  7. node多版本管理--nvmw
  8. 《天书夜读:从汇编语言到windows内核编程》十 线程与事件
  9. Katana-CookieAuthenticationMiddleware-源码浅析
  10. 单例模式/ThreadLocal/线程内共享数据