0

0

PHP批量去除文件头部Bom信息

php中文网

php中文网

发布时间:2016-06-07 11:37:40

|

1325人浏览过

|

来源于php中文网

原创

在linux环境下开发的网站,要移植到windows环境下布署,验证码图片在windows下始终显示不出来,linux下显示是正常的,查其原因,应该是加载的文件里头部带了bom信息,导致显示不出来,于是想到了写个批量替换文件头部bom信息。分享给大家~

什么是文件头部Bom? 不知道的童鞋自补一下:查看文章
说白了,就是在保存文件的时候,文件前面会多出一串隐藏的字符,但网站文件那么多,我们手工来重新编辑太麻烦,用下面的程序来批量去除文件头部Bom:

文件名:bom.class.php /**
 * 批量去除文件头bom.
 * Author: Simon
 * E-mail: vsiryxm@qq.com
 * Date: 2015-8-5
 */

class Bom {
    static public $total = 0; //文件数统计
    static public $count = 0; //替换数统计

    protected $config = array(
        'auto' => 1,    // 是否自动替换 1为自动替换
        'dir'  => '.',  // 遍历的目录 默认当前
        'r'    => 1,    // 1为递归
    );

    function __construct(){
        if(isset($_REQUEST['auto'])){
            $this->config['auto'] = $_REQUEST['auto'];
        }
        if(!empty($_REQUEST['dir'])){
            $this->config['dir'] = $_REQUEST['dir'];
        }
        if(isset($_REQUEST['r'])){
            $this->config['r'] = $_REQUEST['r'];
        }
    }

    // 设置
    public function set($key,$value=''){
       if(isset($this->config[$key])){
            $this->config[$key] = $value;
        }
    }

    // 遍历目录下的文件并替换bom
    public function remove($curr_dir=''){
        $dir = !empty($curr_dir)?$curr_dir:$this->config['dir'];
        if($files = opendir($dir)) {
            ob_end_flush(); // 直接输出缓冲区内容
            while(($file = readdir($files)) !== false) {
                if($file != '.' && $file != '..'){
                    // 是目录 递归
                    if(is_dir($dir.DIRECTORY_SEPARATOR.$file) && $this->config['r']==1){
                        $this->remove($dir.DIRECTORY_SEPARATOR.$file);
                    }
                    elseif(!is_dir($dir.DIRECTORY_SEPARATOR.$file)){
                        self::$total++;
                        if($content = $this->checkBOM($dir.DIRECTORY_SEPARATOR.$file)){
                            if ($this->config['auto']==1){
                                $content = substr($content, 3);
                                $this->rewrite($dir.DIRECTORY_SEPARATOR.$file,$content);
                                echo ''.$dir.DIRECTORY_SEPARATOR.$file.' 已经替换!
'.PHP_EOL;
                                self::$count++;
                            }
                            else{
                                echo ''.$dir.DIRECTORY_SEPARATOR.$file.' 存在Bom!
'.PHP_EOL;
                            }
                        }
                        else{
                            echo $dir.DIRECTORY_SEPARATOR.$file.' 没有Bom!
'.PHP_EOL;
                        }
                    }
                }
                flush();
                //sleep(1);
            }
            closedir($files);
        }
        else{
            echo '检查路径不存在!';
        }
    }

    // 检查Bom
    public function checkBOM($filename){
        $content = file_get_contents($filename);
        if(!empty($content)){
            $charset[1] = substr($content, 0, 1);
            $charset[2] = substr($content, 1, 1);
            $charset[3] = substr($content, 2, 1);
            if (ord($charset[1])==239 && ord($charset[2])==187 && ord($charset[3])==191){
                return $content;
            }
        }
        return false;
    }

    // 重写文件
    public function rewrite($filename, $data){
        $file = fopen($filename, "w");
        flock($file, LOCK_EX);
        fwrite($file, $data);
        fclose($file);
    }

}

////////////////////////////////////////////////
//调用
$bom = new Bom();

echo  nbsp;html>









开始检查Bom...



EOF;

$bom->remove(); 

echo '';
echo 



EOF;
$bom = null;
?>
从上面的类可以看出,我们在调用时,使用默认参数(当前目录、可以递归、自动移除)来运行程序,也可以设置参数来运行:

调用方法二://调用
$bom = new Bom();
$bom->set('auto',0);       //不自动替换,只检查
$bom->set('dir','./test');  //当前目录下的test目录
$bom->set('r',0);            //不递归查找子目录
调用方法三:
http://你的域名/bom.php?auto=1&dir=./test/&r=1

运行效果:

PHP批量去除文件头部Bom信息

PHP批量去除文件头部Bom信息


附批量去除文件头部Bom信息文件包>>>
上传到网站任意目录下,在浏览器里访问运行即可。在运行前请先备份好站点文件,保证要替换的文件可写入。
点击下载:

附件 bom.class.zip ( 1.78 KB 下载:30 次 )

AD:真正免费,域名+虚机+企业邮箱=0元

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

43

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

35

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

204

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.3万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号