zoukankan      html  css  js  c++  java
  • ThinkPHP报Class 'CoreLog' not found竟然是由这个原因导致的

    项目在开发阶段运行的好好的(Debug=true),上线后(Debug=false)其中有一个页面报“对不起,您的页面暂进无法找到!”错误。摸不清头脑,看看了这个页面也没有什么两样,可就是提示这句话,也不知道是哪一步报错了。最后用代码中用全文检索搜索这句话发现:

    ThinkPHPConfconvention.php

      /* 错误设置 */
        'ERROR_MESSAGE'         =>  '对不起,您的页面暂进无法找到!',//错误显示信息,非调试模式有效
        'ERROR_PAGE'            =>  '',    // 错误定向页面
        'SHOW_ERROR_MSG'        =>  false,    // 显示错误信息
        'TRACE_MAX_RECORD'      =>  100,    // 每个级别的错误信息 最大记录数

    由此可见出现此提示是因为这里配置了出错后的提示语,再看到后面的一个配置  'SHOW_ERROR_MSG' => false, // 显示错误信息 这里已配置不显示错误信息,也就是说出任何错误都会提示"ERROR_MESSAGE"配置的内容,因此我们给配置为'SHOW_ERROR_MSG' => true,然后删除runtime里面的内容,再刷新页面,果然看到了错误提示:

    Class 'CoreLog' not found

    这个错误更麻烦,找了半天,首先出错页面没有引用CoreLog,唯独只有这一个页面报错,还是摸不清头脑。最头痛的是,一量把Debug=false或SHOW_PAGE_TRACE=true开启页面调试就不会有此错误,在网上也找不到类似的资料。没办法,一句代码一句代码的扣:

    首先将出错页面的代码全部删除,只留一个Action,访问此Action成功!

    接着再把代码全部恢复访问此Action失败!

    目测其中有一个Action有问题,然后仔细查阅了一下代码,跟其它页面对比对比,找出最有可能出错的一个方法,把这个方法注释掉,再测试,访问成功!

    再恢复方法中的部分代码再测试,访问失败!就这样来回测试,最后定位到其中的一句代码:

    $_result_txt.= self::updateOrderExcel($_child[0], $_child[1], $_child[2],&$users,&$vars);

    这句代码只要存在就报错。但这句代码根本就没执行,再细找最后发现:&$users,&$vars 这2个变量,如果把 & 去掉就好了。加上就不行。猜测的原因可能是这里代码解析出错了,然后调用写日志又失败了。结果就报这个错。

    这里写 & 符号是因为我要传递变量的引用,在方法里赋值,因为返回值只有一个,而我要在方法外得到2个值,只能用引用的方式。

    最后改成另一种写法就好了,在调用的时候不加 & 符号,而在定义的时候加&符号,效果是一样的。

    什么意思呢?举个例子:

    function a($p1,$p2){
        $p2=333;  
        return   $p1+$p2;
    }
    
    a(22,&$p);
    //原本写法是这样的 ,在这里调用完a后$p的值为333,没错,但正因为这样写就出现上述错误。
    最后将写法改为:
    function a($p1,&$p2){
        $p2=333;  
        return   $p1+$p2;
    }
    
    a(22,$p);
    //这样调用完a后$p的值也是333,而解决了上述问题
    至于什么原因,我也不清楚。在Debug=true时两种写法都OK,但Debug=false时第一种写法就会报错!也许第一种写法是PHP新语法吧,目前网上的资料都是第二种写法,我上次无意中发现第一种写法也可行于是就用了第一种写法,没想到会出现这种错误,哎。。。
    致读者:感谢你阅读本文,请随手点击右下角的推荐或分享,谢谢!
  • 相关阅读:
    java.lang.NoSuchMethodError
    asm相关内容想下载(包括 jar 包)
    Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type
    用Navicat连接mysql报错:2003-Can't connect to MySql server on '10.100.0.109'(10039)
    The type java.lang.reflect.AnnotatedElement cannot be resolved. It is indirectly referenced from required .class files
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
    交通测速方式
    卡口和电子警察的区别
    Myeclipse连接Mysql数据库时报错:Error while performing database login with the pro driver:unable
    在window上安装mysql
  • 原文地址:https://www.cnblogs.com/yzeng/p/4794596.html
Copyright © 2011-2022 走看看