批量修改php bom,批量去除BOM脚本PHP版

今天部署一台新的服务器,部署好后发现验证码不能正确显示。检查了代码,确定没有问题,用Fiddle抓取了验证码的数据,看到有BOM,不知道修改哪个文件的时候带进去了。文件太多,不好查找,于是写了以下脚本,自动查找当前目录下的php文件,如果含有BOM,尝试清除,如果清除失败,会提示,进行手动修改。

PHP代码:

class BomCleaner

{

private $files = array();

private $cleaned = array();

private $uncleaned = array();

public function clean($base_dir)

{

$this->walk_files($base_dir);

foreach($this->files as $file)

{

$state = $this->clean_bom($file);

if( $state==1 )

$this->uncleaned[] = $file;

elseif( $state==2 )

$this->cleaned[] = $file;

}

$this->show_result();

}

private function walk_files($dir, $suffix='php')

{

foreach( glob($dir.'/*') as $file )

{

if( is_dir($file) )

$this->walk_files($file);

elseif( is_file($file) && preg_match('/'.$suffix.'$/is', $file) )

$this->files[] = $file;

}

}

private function clean_bom($file)

{

$head = file_get_contents($file, false, null, 0, 3);

if( bin2hex($head)=='efbbbf' )

{

if( !is_writable($file) )

return 1;

$data = file_get_contents($file, false, null, 3);

file_put_contents($file, $data);

return 2;

}

return 0;

}

private function show_result()

{

if( !$this->cleaned && !$this->uncleaned )

{

die('No BOM file found!');

}

else

{

echo 'Cleaned '.count($this->cleaned).' files: ';

echo '

  1. ';

foreach($this->cleaned as $file)

echo '

'.$file.'';

echo '

';

echo 'Uncleaned '.count($this->uncleaned).' files: (not writeable)';

echo '

  1. ';

foreach($this->uncleaned as $file)

echo '

'.$file.'';

echo '

';

}

}

}

$cleaner = new BomCleaner;

$cleaner->clean(__DIR__);

Linux脚本

在linux下,可用以下脚本一键解决,更方便

find . -type f -exec sed -i 's/\xEF\xBB\xBF//' {} ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值