强烈向大家推荐一个好网站,【我要自学网】,教程由在校老师录制,有办公会计、平面设计、室内设计、机械设计、网页编程、影视动画等教程.....让你足不出门,都可以体验学校的专业教育!
大家都知道,使用记事本等部分工具在写php文件,如果文件中使用到session、header等php内置的函数时,要求这些语句之前必须不能有空格、回车、echo输出语句、html标记等,否则页面回给出警告,并且提示 这些语句之前有输出~,错误信息就不贴出来了,总之好多同学遇到这种问题,总是有点不知所措 ,有的同学检查代码后发现这些语句前没有上述我们提及到的一些空格、回车、echo输出语句、html标记等,这是怎么回事呢?这就是文件使用utf-8编码保存的时候,有bom标记!
前段时间在网上找这个问题的答案,终于解决,我这里转发出来供大家学习参考,感谢作者。用法是,将下面的代码保存到一个文件,放到项目目录下,通过浏览器访问一下就可以了:
<?php
$s
=0;
//统计成功数
$f
=0;
//统计失败数
//遍历所有文件
function
find_allfile(){
$i
=
"*"
;
while
(
$file
=
glob
(
$i
)){
foreach
(
$file
as
$s
){
if
(!
is_dir
(
$s
))
$allfile
[]=
$s
;
}
$i
.=
"\*"
;
}
return
$allfile
;
}
//清除BOM标记
function
del_bom(){
global
$s
,
$f
;
$file
=find_allfile();
foreach
(
$file
as
$fname
){
$fname
=dirname(
__FILE__
).
"\\"
.
$fname
;
$filecont
=@
file_get_contents
(
$fname
);
$bom
=
substr
(
$filecont
,0,3);
$bom
=bin2hex(
$bom
);
if
(
$bom
==
"efbbbf"
){
//判断文件中的前3个字节是否为BOM标记值
$filecont
=
substr
(
$filecont
,3);
$result
=@
file_put_contents
(
$fname
,
$filecont
,LOCK_EX);
if
(
$result
){
echo
"[file]
$fname
--- --- <em style=\"color:green\">清除成功</em><br
/>";
$s
++;
}
else
{
echo
"<div id="
down
"><a id="
load
" title="
下载链接
" href="
#button_file
"><i class="
icon-down
"></i>下载地址</a><div class="
clear"></div></div>
$fname
--- --- <em
style=\"color:red\">清除失败</em>(文件只读或者被占用)<br
/>";
$f
++;
}
}
}
}
del_bom();
if
(
$s
==0 &&
$f
==0){
echo
"<p>所有文件正常,没有发现BOM标记。</p>"
;
}
else
{
echo
"<p>统计结果:清除成功($s) | 清除失败($f)</p>"
;
}
?>