1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <?php
- /**
- * Created by PhpStorm.
- * User: 中闽 < 1464674022@qq.com >
- * Date: 2020/2/4
- * Time: 12:47
- */
- namespace app\common\command;
- use think\console\Command;
- use think\console\Input;
- use think\console\input\Argument;
- use think\console\input\Option;
- use think\console\Output;
- class CheckBOM extends Command
- {
- /**
- * 批量检测文件是否有bom
- * php think CheckBOM "D:\www\php"
- */
- protected function configure()
- {
- $this->setName('CheckBOM')
- ->addArgument('basedir', Argument::OPTIONAL, "base dir", ".")
- ->addOption('rewrite', 'r', Option::VALUE_NONE, 'delete bom')
- ->setDescription('check files if has bom');
- }
- protected function execute(Input $input, Output $output)
- {
- $basedir = $input->getArgument("basedir");//需要检测的目录,点表示当前目录
- $this->runDir($basedir, $output, $input->hasOption('rewrite'));
- }
- private function runDir($basedir, $output, $rewrite)
- {
- if (file_exists($basedir)) {
- if ($dh = opendir($basedir)) {
- while (($file = readdir($dh)) !== false) {
- if ($file != '.' && $file != '..') {
- $path = $basedir . DS . $file;
- if (!is_dir($path)) {
- $res = $this->checkBOM($path, $rewrite);
- if ($res != "ok")
- $output->writeln($path . ' - ' . $res);
- } else {
- $this->runDir($path, $output, $rewrite);
- }
- }
- }
- closedir($dh);
- }
- }
- }
- private function checkBOM($filename, $rewrite = false)
- {
- $contents = file_get_contents($filename);
- $charset[1] = substr($contents, 0, 1);
- $charset[2] = substr($contents, 1, 1);
- $charset[3] = substr($contents, 2, 1);
- if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
- if ($rewrite) {
- $rest = substr($contents, 3);
- $this->rewrite($filename, $rest);
- return ('BOM found, automatically removed');
- } else {
- return ('BOM found');
- }
- } else {
- return ("ok");
- }
- }
- private function rewrite($filename, $data)
- {
- $filenum = fopen($filename, "w");
- flock($filenum, LOCK_EX);
- fwrite($filenum, $data);
- fclose($filenum);
- }
- }
|