Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk membuang php bom

Bagaimana untuk membuang php bom

藏色散人
藏色散人asal
2021-12-08 10:17:471647semak imbas

Cara untuk membuang php bom: 1. Cari direktori akar PHP 2. Letakkan "function checkBOM($filename){...}" dan kod lain dalam direktori root, dan jalankannya melalui pelayar untuk mengaksesnya.

Bagaimana untuk membuang php bom

Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.4, komputer Dell G3.

Bagaimana untuk membuang php bom?

Kaedah mudah untuk mengalih keluar BOM dalam PHP

/* 
 +------------------------------------------------------------------------------------------- 
 + Title        : 去掉BOM头方法 
 + Author       : hello_sgw 
 + Version      : V1.0.0.1 
 + Initial-Time : 2017-08-12 15:18
 + Last-time    : 2017-08-12 16:01
 + Desc         : 
 +------------------------------------------------------------------------------------------- 
*/

Apabila saya memanggil antara muka, kerana saya menggunakan kaedah enkapsulasi yang disediakan oleh pihak lain, ralat terus ditunjukkan semasa mengeluarkan satu set data. Akhirnya, saya berpendapat bahawa kaedah yang diberikan oleh pihak lain mungkin mengandungi isu pengekodan (dengan pengepala BOM), jadi saya mencari kaedah dalam talian untuk mengesan BOM dan mengeluarkannya dan menjana semula fail baharu. data boleh dipaparkan seperti biasa.

Apakah itu pengepala BOM?

BOM --Byte Order Mark, nama Cina diterjemahkan sebagai "tanda pesanan bait". Dalam fail yang dikodkan utf-8, BOM berada dalam pengepala fail dan menduduki tiga bait untuk tandai fail. Ia tergolong dalam pengekodan UTF-8

Terdapat banyak perisian yang boleh mengecam pengepala BOM, tetapi sesetengahnya tidak dapat mengecam pengepala BOM Pengekodan UTF-8 dengan Notepad Sebab mengapa berlaku masalah.

Penyelesaian:

# 这里代码为PHP方式去除当前目录及字目录所有文件BOM信息,只要将此代码文件放到根目录下,然后浏览器运行访问就可以了
<?php
if (isset($_GET[&#39;dir&#39;])) { //设置文件目录 
  $basedir = $_GET[&#39;dir&#39;];
} else {
  $basedir = &#39;.&#39;;
}
 
$auto = 1;
checkdir($basedir);
 
function checkdir($basedir)
{
  if ($dh = opendir($basedir)) {
    while (($file = readdir($dh)) !== false) {
      if ($file != &#39;.&#39; && $file != &#39;..&#39;) {
        if (!is_dir($basedir . "/" . $file)) {
          echo "filename: $basedir/$file " . checkBOM("$basedir/$file") . " <br>";
        } else {
          $dirname = $basedir . "/" . $file;
          checkdir($dirname);
        }
      }
    }
    closedir($dh);
  }
}
function checkBOM($filename)
{
  global $auto;
  $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 ($auto == 1) {
      $rest = substr($contents, 3);
      rewrite($filename, $rest);
      return ("<font color=&#39;red&#39;>BOM found, automatically removed.</font>");
    } else {
      return ("<font color=&#39;red&#39;>BOM found.</font>");
    }
  } else
    return ("BOM Not Found.");
}
 
function rewrite($filename, $data)
{
  $filenum = fopen($filename, "w");
  flock($filenum, LOCK_EX);
  fwrite($filenum, $data);
  fclose($filenum);
}

Cadangan kajian: "Tutorial Video PHP"

Atas ialah kandungan terperinci Bagaimana untuk membuang php bom. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn