第370行是这样一句:        return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function($match){return strtoupper($match[1]);}, $name));居然要分配2.8G内存??

解决方案 »

  1.   

    Allowed memory size of 1916796928 bytes exhausted (tried to allocate 3086655745 bytes)
    的含义是:
    在 1916796928b (1828M) 的可用内存中
    申请 3086655745b (2943M)的空间失败显然是待处理的变量 $name 出现了问题清空 Runtime 目录再试试
      

  2.   

    清空 Runtime 目录了,还是没有解决问题!
      

  3.   

    这个啊,框架怎么耗内存也不可能耗到2G啊
    估计是死循环,不断开辟空间了。
    如果你确定是那句的问题,就不要写那么复杂啊啊
    $b = preg_replace_callback('/_([a-zA-Z])/', 'aaa', $name)
    return ucfirst($b);function aaa($match){
        return strtoupper($match[1]);
    }可能是由于替换掉_([a-zA-Z]) 然后从头开始找,所以会无限循环,你得让他结束的方法,
    比如把_去掉来停止
    换别的方案可能可以 preg_replace,preg_match_all,preg_split
      

  4.   

    刷新下,又出现如下问题。再刷新,还是上面内存问题,交替出现。
    ------------------
    502 Bad Gatewaynginx/1.4.1
      

  5.   

    我怀疑是你的程序哪里错了,可能是写法错了,使底层框架产生死循环。
    你这样做,查看你可控的逻辑流程。
    从上面开始,一句句往下添加exit();(当然你可以用二分法找)
    直到开启哪一句使得出现这个问题,就是那句错了。
    查一下那句用到了什么函数,打印一下变量,看看传参顺序有没有错。
    不行的话把那句及附近的代码贴上来让大家帮你看看
      

  6.   

    我看了3.0下面很像没有你说的那个函数
    http://doc.thinkphp.cn/reference/functions.html
    会不会是你版本低了?
      

  7.   

    哦 是3.2.2 看错了 你按9楼那样做就好。
    然后和官方手册匹配下用法对不对
    http://document.thinkphp.cn/manual_3_2.html
      

  8.   

    ----------------------------
    版主,你不是碰到和回答过同样问题么?你是不是天天熬夜到2点,达到了过目就忘的能力啊。
    问题原因就在于:preg_replace_callback出现内存泄露。在windows下没有问题,在linux下5.4.22,一下有上面问题。所在,TP32在linux用php5.4可能会出现上面问题。
      

  9.   

    很奇怪!即便我判定是 bug,那也不能说明什么----------------------------
    版主,你不是碰到和回答过同样问题么?你是不是天天熬夜到2点,达到了过目就忘的能力啊。
    问题原因就在于:preg_replace_callback出现内存泄露。在windows下没有问题,在linux下5.4.22,一下有上面问题。所在,TP32在linux用php5.4可能会出现上面问题。
      

  10.   


    多谢,和我程序完全没有关系。随便使用下 preg_replace_callback就会出现问题。比如test.php:var_dump(preg_replace_callback('/\w{2}/',function($m)use(&$i){ echo ' i='.$i++; return $m[0]."cc ";},'abcd2acc'));也会出现同样的问题。在国外网站随便一搜索,报告这个bug的人实在是太多了。但一直反复解决了,又反复出现。
      

  11.   

    自己写了个自认为比TP优秀多的框架YuYan PHP,从根本上解决了此问题。