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断点也就没作用了。