公司运营人员反馈有时后台会出现这种状况如下图
原因是ajax 解析的数据不是json 所以抛出这这个 alert异常信息。因为这种情况是偶现,刷新一小时可能会出现一次。因为是老项目还是thinkphp3.0版本,偶现也不容易定位错误在哪,历史遗留问题,我也没参与这个问题解决方案,后来新来个总监,把这锅甩到了我的身上,绩效给我扣了分,NND。那我就来看一看吧....
经过排查发现,发现是因为TP3抛出了这样一个致命错误。
Fatal error: Call to undefined function Think\C() in /usr/local/nginx/html/byg-web/ThinkPHP/Library/Think/Think.class.php on line 313
问问度娘,说法基本一致。我也就没细细研究,直接暴力删掉runtime文件里的内容。但是问题还会出现。没有从根本上解决问题(度娘也不靠谱啊)。因为报的是没有找打C方法的错误,所以我决定到TP3的初始化执行文件看一看。看看引没引进来。
在D:\wamp\www\techhg-byg\ThinkPHP\Library\Think\Think.class.php中发现了这个判断,就马上明白问题所在;
如果if()条件成立,就引入在runtime文件中生成的common~runtime.php编译文件(这个文件的内容就是核心文件编译后的方法,包括C()方法);
如果不成立引入正常文件,并 重新生成common~runtime.php编译文件;
说道这里,大家应该大概知道问题原因所在了吧;
就是当 程序判断 引common~runtime.php引入失败(或读取缺失)就会抛出
Fatal error: Call to undefined function Think\C() in /usr/local/nginx/html/byg-web/ThinkPHP/Library/Think/Think.class.php on line 313
(至于什么原因引入失败或读取缺失,我也没细细研究);
解决方法一:禁止生成common~runtime.php文件。(百度有很多方法但基本没什么卵用,看看图片3 里面他是如何生成的 if(!APP_DEBUG),大家就知道怎么解决了);
解决方法二:简单暴力 直接走ELSE{}的编码,不要if()