PHP中的Division by zero报错处理技巧
来源:才华咖 本文已影响1.98W人
来源:才华咖 本文已影响1.98W人
ecshop部分模板使用时,会出现“Warning: Division by zero inxxxxxlib_”错误,那么怎么处理呢?来看看小编的分享吧!
错误提示
在打开某些产品分类或者某些产品页面的时候,特定语言才报错。
错误是:Division by zero in xxx
错误原因
这个错误的原因,就是运算的过程中,被除数是0。上过小学的都知道“0是不可以作为被除数的”。
解决思路
1:判断值为0的时候跳过运算;
2:如果非要赋值给一个变量,可以做判断后赋固定值或者输出false,后面代码判断如果变量是true才使用它进行下一步代码的实现。
DEBUGING
解决问题之前,先来个两个小知识点:
1、在opencart中,vqmod的优先等级是最高的;
2、哪里报错不一定错误就在哪里,但是首先看的还是报错的地方。
从上图中,我们找到了vqcache下对应的文件对应行数,发现如下代码:
//Cosyonecustomcodestarts
if((float)$result['special']){
$sales_percantage=((($this->tax->calculate($result['price'],$result['tax_class_id'],$this->config->get('config_tax')))-($this->tax->calculate($result['special'],$result['tax_class_id'],$this->config->get('config_tax'))))/(($this->tax->calculate($result['price'],$result['tax_class_id'],$this->config->get('config_tax')))/100));
}else{
$sales_percantage=false;
}
从这个代码可以看出有若干个参数,我们留意“/”后面的被除数就好,这里被除数有两个地方,其中第二个是正整数100,可以排除。那么问题就在下面这段代码中:
$this->tax->calculate($result['price'],$result['tax_class_id'],$this->config->get('config_tax'))
我们从上面这个方法里看到三个参数,分别用print_r打印了下参数的值,结果发现第二个参数“$result['tax_class_id']”是“000000”。很显然,如果这个是0,我们就要让:
$sales_percantage = false ;
所以我们这里的代码要修改为:
//Cosyonecustomcodestarts
if((float)$result['special']&&$result['tax_class_id']){
$sales_percantage=((($this->tax->calculate($result['price'],$result['tax_class_id'],$this->config->get('config_tax')))-($this->tax->calculate($result['special'],$result['tax_class_id'],$this->config->get('config_tax'))))/(($this->tax->calculate($result['price'],$result['tax_class_id'],$this->config->get('config_tax')))/100));
}else{
$sales_percantage=false;
}
也就是,加多一个判断依据,必须满足两个值都存在的'前提下,才进行如下运算,否则是false。
修改代码,保存代码,上传文件,刷新页面,警告提示语消失,over。
但是,毕竟我们改的是缓存文件,真正要修改好代码,我们还是要把代码写到核心文件或者插件的文件里。
修改源
首先,我们从三个地方查找,分别是:
核心文件:/catalog/controller/product/;
vqmod:/vqmod/xml/*;
ocmod:上传插件的文件备份,或者数据库查看:oc_modification表xml字段;
虽然vqmod的优先等级高于ocmod,但是其实先从比较方便的地方找起也是可以的。有个方法可以排除是否ocmod。如果是ocmod插件的,缓存文件名必定有“system_storage_modification”。
但是也由于vqmod优先等级最高,所以被ocmod缓存的文件的文件名也可能有这个字样,所以排查的顺序如上所述。【如果报错指向“/system/storage/modification/”则一定是ocmod插件引起】
核心文件的话,编辑器打开ctrl+F进行关键字查找修改。
如果是vqmod的xml,要么排除法排除不可能是的文件,然后从可能是的文件里查找。如果文件太多就用notepad++等编辑器或者IDE工具,可以进行目录搜索,从中找到文件。
如果是ocmod,则用MYSQL工具进行字段like %...% 搜索,或者用SQL语句:
SELECT*FROM`oc_modification`WHERE`xml`like"%关键代码%"
由于这里存的数据被转义过,所以搜索的内容不要带有换行之类的,抓取比较有特点的代码进行查找和修改。修改的时候注意转义的影响哈。当然现在很多MYSQL管理工具这一点做的还是挺好的。建议最好修改插件的文件,然后重新上传一次。平时插件装了后自己留备份还是有必要的。如果没文件就导出备份再修改。
扩展
上面的示例代码刚好是刚遇到的,所以拿来举例子。授人以鱼不如授人以渔,有的小问题大家花钱又心疼,想自己折腾也未尝不可以,以后还是会提供更多这类比较初级的解决方案给大家。下面另外举例子:
$a=0;
$value=$key/$a;
//这样可能会提示警告语
if($a){
$value=$key/$a;
}else{
$value=false;
}
//对$value进行赋值计算结果或者false,也可以赋值预设数字,以便后面进行引用。
上面的方法只是一些示例和排错的技巧,一种思路,具体情况具体分析,但是解决问题要有清晰的思路哈。学会一种技巧少走一些弯路,少花一些钱还是可以的。不过如果要赚钱,舍得花钱找技术开发更适合自己的网站,是很有必要的,花钱减少自己的时间浪费,也少出现一些不必要的麻烦,最重要的是专业的代码和业余的代码还是很大区别的。再者,一个很简单的道理“花钱就是投资”。
初中英语写作范文:My Happy Times During Winter Vacation
Think Positive Thoughts Every Day英语作文
有关JavaScript中的prototype.bind()方法介绍
Hoopsters Believe In Hot-or-Not Hand美文欣赏
英语阅读:VIT declines to acquire Ang Mo Kio property
ASandpiperToBringYouJoy英语阅读
My Happy Times During Winter Vacation初中英语作文
The Opinion of Buying Cars英语作文
The relationship between theory and practice大学英语作文
JavaScript在Android的WebView中parseInt函数转换不正确
A Bitter Experience in My Childhood初中英语作文
英语阅读:Why Apple says it's slowing down older iPhone
小学生英语作文:How to improve your English
英语作文:I thinh you can be good friends
Why Public Speaking Is So Important 公共演说的重要性大学英语
WebSphere MQ Solution Designer认证考试
How to Spend the Winter Holiday初中英语作文
A Letter to the University President为题目的作文
八年级《unit8 Why don’t you get her a scarf? Period1》评课稿
以《The Surprise on Valentines Day》为题的英语作文
Efforts Urged to Improve Womens Reproductive Health英语阅读
英语作文My Experience With Foreign Coins
我的英语演讲稿living at present is my top concern
评教研课Unit One Will people have robots?范文
My experience with foreign coins初中英文作文
英语作文: The Uncivilized Internet Words
英语阅读:Are You Tricked by These Optical Illusions
Identifyingpeoplebyoccupation辨别身份实用英语口语
The Bitter and Happiness of Study英语作文
常用的PHP技术技巧
处理人际关系的6个技巧
初中英语《Unit 1 Will people have robots》教学设计
Health in developing countries大学六级英语写作范文
Food and place of interest in Beijing初中英语作文
Chinas Liu to seek injury advice in US soon英语作文
Should Internet Slang Be Prohibited英语作文
相处的心理技巧的人生哲理
公文标题中标点符号的处理技巧
克服社交恐惧症OvercomingSocialPhobia初中英语作文
解决PHP中的Cannot modify header information 问题