PHP批量删除空行|wordpress迁移的艰辛

2009年12月24日 | 分类: PHP | 标签: , ,

博客这些天一直处于死亡状态,昨天空间商帮忙把博客从浙江机房搬到河南机房了,暂时可以开通了。
Warning: Cannot modify header information – headers already sent by (output started at /*****/wp-includes/compat.php:230
头部有输出,昨天加班到比较晚,回家看《花木兰》,没去管博客,今天来公司,发现问题严重了,Google竟然抓取了页面
pigblog
打开这些PHP的文件,发现下面全部都多了两行,就是php闭合标签之后多出了两个空行,造成在include 或是 require 后会有输出。
开始以为是只有几个文件是这样的,多打开几个发现,整个空间里面的php文件js,css,php都多出了两个空行,估计是华夏名网的在线文件管理器打包造成的。
因为本人对正则不熟悉,不过其实用正则替换倒不是太难,关键问题在于windows和linux下面的换行,回车符号的区别,费了不少时间研究。
虽然我知道windows下面是rn linux下面是n 可是我用rn在windows系统上怎么也匹配不了,后来才发现我用的eclipse里面的我用的是Unix格式,换行就是n,而不是rn,功夫不负苦心人哈,把代码贴出,也可以下载,有什么更好的方法,记得告诉我哈,各位!

//$path=__DIR__;//php 5.3
$path=dirname(__FILE__);
function get_all_files($path,$pattern='/php$|js$|css$/i'){
    $list = array();
    foreach( glob( $path.DIRECTORY_SEPARATOR.'*') as $item ){
        if( is_dir( $item ) ){
         $list = array_merge( $list , get_all_files( $item,$pattern ) );
        }
        else{
            if(preg_match($pattern,$item)){
                $list[] = $item;
        	}
        }
    }
    return $list;
}
$list=get_all_files($path,'/php$/i');
foreach($list as $v){
$str=file_get_contents($v);
//var_dump($str);
$str=preg_replace("/?>s*$/i",'?>',$str);
//var_dump($str);
file_put_contents($v,$str);
}
header('Content-Type:text/html;Charset=utf-8');
echo "删除空白完成,Have a good time!";
echo "回首页";

点这里下载文件
解压后放到空间的根目录下面,会遍历所有子目录,并删除末尾的空行。

  1. 2010年1月22日16:13

    空行应该是编码格式的问题,看看这儿
    http://shuair.cn/archives/php-require-extra-line/

    • 2010年1月26日11:31

      并不是这样的,所有的php,js,css,html文件结尾都多出两个空行,你要是用dw,或是editplus这样手工的去除空行,会手抽筋还搞不完的,整个wordpress都是这样,只有段程序来搞了

  2. 2010年2月1日19:29

    看样子你学的不错,加油!

  3. 2010年4月16日14:30

    养成好习惯 php纯脚本文件结尾不闭合 可以避免这个问题

    • 2010年4月19日08:43

      是这样,WP,还有很多开源系统都没有那么做,这情况正好让我遇上了

  4. 2010年6月22日04:43

    哈哈 真好 终于让我找到好方法了~

    • 2010年6月29日08:43

      呵呵,当时遇到这情况,真是让人不爽,这个方法也可以解决其他类似的问题了