首页 > php教程 > php手册 > 正文

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

php中文网
发布: 2016-06-07 11:37:40
原创
1325人浏览过

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

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

文件名:bom.class.php<?php <br /> /**<br>  * 批量去除文件头bom.<br>  * Author: Simon<br>  * E-mail: vsiryxm@qq.com<br>  * Date: 2015-8-5<br>  */<br><br> class Bom {<br>     static public $total = 0; //文件数统计<br>     static public $count = 0; //替换数统计<br><br>     protected $config = array(<br>         'auto' =&gt; 1,    // 是否自动替换 1为自动替换<br>         'dir'  =&gt; '.',  // 遍历的目录 默认当前<br>         'r'    =&gt; 1,    // 1为递归<br>     );<br><br>     function __construct(){<br>         if(isset($_REQUEST['auto'])){<br>             $this-&gt;config['auto'] = $_REQUEST['auto'];<br>         }<br>         if(!empty($_REQUEST['dir'])){<br>             $this-&gt;config['dir'] = $_REQUEST['dir'];<br>         }<br>         if(isset($_REQUEST['r'])){<br>             $this-&gt;config['r'] = $_REQUEST['r'];<br>         }<br>     }<br><br>     // 设置<br>     public function set($key,$value=''){<br>        if(isset($this-&gt;config[$key])){<br>             $this-&gt;config[$key] = $value;<br>         }<br>     }<br><br>     // 遍历目录下的文件并替换bom<br>     public function remove($curr_dir=''){<br>         $dir = !empty($curr_dir)?$curr_dir:$this-&gt;config['dir'];<br>         if($files = opendir($dir)) {<br>             ob_end_flush(); // 直接输出缓冲区内容<br>             while(($file = readdir($files)) !== false) {<br>                 if($file != '.' &amp;&amp; $file != '..'){<br>                     // 是目录 递归<br>                     if(is_dir($dir.DIRECTORY_SEPARATOR.$file) &amp;&amp; $this-&gt;config['r']==1){<br>                         $this-&gt;remove($dir.DIRECTORY_SEPARATOR.$file);<br>                     }<br>                     elseif(!is_dir($dir.DIRECTORY_SEPARATOR.$file)){<br>                         self::$total++;<br>                         if($content = $this-&gt;checkBOM($dir.DIRECTORY_SEPARATOR.$file)){<br>                             if ($this-&gt;config['auto']==1){<br>                                 $content = substr($content, 3);<br>                                 $this-&gt;rewrite($dir.DIRECTORY_SEPARATOR.$file,$content);<br>                                 echo '<span>'.$dir.DIRECTORY_SEPARATOR.$file.' 已经替换!</span><br>'.PHP_EOL;<br>                                 self::$count++;<br>                             }<br>                             else{<br>                                 echo '<span>'.$dir.DIRECTORY_SEPARATOR.$file.' 存在Bom!</span><br>'.PHP_EOL;<br>                             }<br>                         }<br>                         else{<br>                             echo $dir.DIRECTORY_SEPARATOR.$file.' 没有Bom!<br>'.PHP_EOL;<br>                         }<br>                     }<br>                 }<br>                 flush();<br>                 //sleep(1);<br>             }<br>             closedir($files);<br>         }<br>         else{<br>             echo '检查路径不存在!';<br>         }<br>     }<br><br>     // 检查Bom<br>     public function checkBOM($filename){<br>         $content = file_get_contents($filename);<br>         if(!empty($content)){<br>             $charset[1] = substr($content, 0, 1);<br>             $charset[2] = substr($content, 1, 1);<br>             $charset[3] = substr($content, 2, 1);<br>             if (ord($charset[1])==239 &amp;&amp; ord($charset[2])==187 &amp;&amp; ord($charset[3])==191){<br>                 return $content;<br>             }<br>         }<br>         return false;<br>     }<br><br>     // 重写文件<br>     public function rewrite($filename, $data){<br>         $file = fopen($filename, "w");<br>         flock($file, LOCK_EX);<br>         fwrite($file, $data);<br>         fclose($file);<br>     }<br><br> }<br><br> ////////////////////////////////////////////////<br> //调用<br> $bom = new Bom();<br><br> echo  nbsp;html&gt;<br><br><br><meta> <br><meta> <br><title></title> <br><meta> <br><style><br /> body,h1,div{margin:0;padding:0;font:14px/1.5 &#039;Microsoft Yahei&#039;,tahoma,arial;}<br /> .process {width:800px;height:750px;padding:20px;border:1px solid #ddd;overflow:scroll;margin-left:20px;line-height:180%;}<br /> h1{font-size:25px;text-indent:20px;margin:20px 0 10px 0;}<br /> </style> <br><br><br><h1>开始检查Bom...</h1> <br><div> <br> EOF;<br><br> $bom-&gt;remove(); <br><br> echo '<script>document.getElementById(\&#039;result\&#039;).innerHTML = \&#039;检测完毕!共有&#039;.Bom::$total.&#039;个文件,替换了&#039;.Bom::$count.&#039;个文件\&#039;;</script>';<br> echo  </div> <br><br><br> EOF;<br> $bom = null;<br> ?&gt;从上面的类可以看出,我们在调用时,使用默认参数(当前目录、可以递归、自动移除)来运行程序,也可以设置参数来运行:

调用方法二://调用<br> $bom = new Bom();<br> $bom-&gt;set('auto',0);       //不自动替换,只检查<br> $bom-&gt;set('dir','./test');  //当前目录下的test目录<br> $bom-&gt;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速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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