内存溢出问题

浏览:3878 发布日期:2014/05/26
3.2.1 - 致命 - 已关闭
看到之前也有人遇到过:
1、http://www.thinkphp.cn/topic/13930.html
2、http://www.thinkphp.cn/topic/13810.html

这或许不是个Bug,本着先自己调试问题,先假设自己的服务器环境配置有问题的原则,先服务器环境调成开发模式,后代码中exit断点定位。结果经过一天的折腾始终没找到问题的根源所在,只好在Bug区提交了。



显示的这个函数出现问题;function parse_name($name, $type=0) {
    if ($type) {
        return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function($match){return strtoupper($match[1]);}, $name));
    } else {
        return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
    }
}
但一步一步定位代码发现,似乎是下面这个函数function controller($name,$path=''){
    $layer  =   C('DEFAULT_C_LAYER');
    if(!C('APP_USE_NAMESPACE')){
        $class  =   parse_name($name, 1);
        import(MODULE_NAME.'/'.$layer.'/'.$class.$layer);
    }else{
        $class  =   MODULE_NAME.'\\'.($path?$path.'\\':'').$layer;
        $array  =   explode('/',$name);
        foreach($array as $name){
            $class  .=   '\\'.parse_name($name, 1);
        }
        $class .=   $layer;
    }
    //此处插入 exit() 以上代码顺利执行
    if(class_exists($class)) {     
        //但在此处插入exit()就会有如图内存溢出提示且
        return new $class();
    }else {
        return false;
    }
}
这个问题非常奇怪,我本地的win7下Oracle VM VirtualBox虚拟机内跑centos6.3_64(给予512M内存),开发的时候挺好,一上传到阿里云服务器(1.5G内存)上去就直接如图提示了。

通过断点定位,最后class_exists($class)通不过;也就是这个if语句中判定时就内存溢出(致命错误),代码自然不会再执行,if语句体内的exit断点也就没作用了。
评论(
后面还有条评论,点击查看>>