有些程序在windows主机上运行正常,但在linux服务器(如乐道香港空间采用linux系统平台)上运行可能会出现错误,最常见的错误是登录网站后台时验证码不显示,这是因为程序代码中自动生成了BOM头(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于运行在linux主机上的php文件来说,BOM是个大麻烦。
我们不清楚那个文件中带有BOM,可用一个小小的工具,批量清理所有网站文件中的BOM,非常实用,将一个php文件上传到空间根目录中,通过域名运行该文件即可。
php文件百度网盘下载地址:http://pan.baidu.com/s/1jGyHFZC (无毒,放心使用)
下载后将clear.php上传到空间根目录中,运行你的网站:www.域名.com/clear.php 即可批量清理所有文件中的BOM头。
该clear.php里的代码如下:
<?php
if (isset($_GET['dir'])){ //设置文件目录
$basedir=$_GET['dir'];
}else{
$basedir = '.';
}
$auto = 1;
checkdir($basedir);
function checkdir($basedir){
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' && $file != '..'){
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=red>BOM found, automatically removed.</font>");
}else {
return ("<font color=red>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);
}
?>