php开发中应该注意的错误开关与常见处理[开发篇]
我们可能一开始就接触一个项目的开发,刚开始时都是信心满满,一定把这个项目做得非常完美,但是时间那么少,任务那么多,我们就只有将就了。
首先,一般情况下,我们会加一个调试标志,define('APP_DEBUG', true); 用以一些方便的地方进行特殊操作,也会将error_reporting打开,一般会很烦,通常会这么做,error_reporting(E_ALL & ~(E_STRICT | E_NOTICE));这样就会避免很多不必要的麻烦,提升开发速度同时,又能尽快发现问题,然后上线之后,直接error_reporting(0); 可能很多人是这么干的。
但是,我们这样做真的好吗?线上的环境和测试环境难道就真的一点差异都没有?这是不可能的,所以,我们需要及时了解线上产品的一些运行情况,也就是说,线上,我们也需要错误报告,小公司直接找服务器管理员拿日志就OK,大公司的话一般要申请什么的,反正就是流程一堆。拿到日志之后,就需要对其中出现问题的地方进行修补,排查,处理问题。那么,要做到这一点,就需要把线上的error_reporting打开,而且配置的错误日志路径应该是一个绝对路径,否则,将会在各个地方产生错误日志(只有一个入口的情况除外),notice和strict就不要报了,其他的都报出来。
总结一下,开发过程中,可能遇到的一些错误报告我们不怎么会在意的。 1、division by zero,除0操作,在涉及除数的时候,我们很多时候直接相除,而没有考虑0的情况,这是会被当作warning来处理的,在一些严格的语言中,甚至是当作致命错误来处理的,所以应该解决,php处理除0操作是把整个结果当作0的,自己可以根据业务需求进行相应设置。2、array_combine,这个函数是将数组一个以键一个以值的方式组合起来,但是,当有个值为空或非数组时,则会报一个warning,而且得到的值为null,而非有部分值,应当注意。3、foreach,当内部循环为boolean值时,也会发出一个warning,为字符串时则可以继续进行。4、json_encode,当当前编码不为utf-8而又有中文时,则报告一个warning,不是utf-8序列,处理办法,将其他编码转换成utf-8后,再进行json_encode。使用jquery的ajax功能时,是以utf-8传递的,接收时也需要转换成对应编码方可不乱码。
ini_get相关几个实用选项,display_errors:是否显示错误, error_log:错误日志文件,include_path:默认搜索文件的路径也是当找不到文件时,给的最后一次查找机会。memory_limit: 最大内存限制,跑脚本或进行导出时特别注意。更多选项配置可参考 其他网友文章 。
总之,能看得到错误,都是有隐患的,及早处理的好,赶时间,上班了。
php开发中应该注意的错误开关与常见处理[开发篇]的更多相关文章
- Vue CLI 3开发中屏蔽的EsLint错误 (.eslintrc.js 在vue3+中 修改这个)
1.关闭eslint校验有了eslint的校验,可以来规范开发人员的代码,是挺好的.但是有些像缩进.空格.空白行之类的规范,在开发过程中一直报错,未免太过于苛刻了.所以,我还是会选择关闭eslint校 ...
- Code::Blocks开发中的字符串编码错误
刚开始使用Code::Blocks开发Windows中文应用程序的朋友们,如果在代码中使用了中文字符串,编译时可能遇到过Illegal byte sequence或Failure to convert ...
- python开发中容易犯的错误整合
写在前面 长期更新的博文.多数是一些比较隐蔽的问题.欢迎留言补充. pip并不是那么安逸 pip安装对于开发者来说确实是一种解放.可以自动安装依赖包,但执行最简单的pip安装命令时,并不是所有的依赖都 ...
- ERP程序开发中遇到的六种错误
经常回顾同事写的代码,发现一些问题,总结分析,用于员工培训,或系统优化方面的内容教学. 文中有问题的的代码我用黑体字标识. 1 界面与逻辑代码混淆 这是目前发现的比较严重的问题.框架花费了很大的力气, ...
- Xamarin.Android 开发中遇到旋转屏幕错误
错误信息 : System.NotSupportedException: Unable to find the default constructor on type App5.MyFragment. ...
- jQuery开发中容易忽视的错误
1.引用jQuery库文件的<script>标签,必须放在引用自定义脚本文件的<script>标签之前,否则,就会发生找不到对象:最好在<head>元素中,把引入样 ...
- ios开发中遇到的编译错误总结
1:Undefined symbols for architecture arm64: ? 1 2 3 <code>Undefined symbols for architecture a ...
- ibatis 开发中的经验 (三)Struts+Spring+Ibatis 开发环境搭建
ibatis项目中用到了一些基本配置,须要和spring集成,看了看这些配置大部分同hibernate中是一样的,也比較好理解.仅仅是须要他们的配置中每个类的含义,还有当中的一些细节 ...
- MVVM框架在unity开发中的使用
1.什么是MVVM 借用一下百度百科上对MVVM的介绍,MVVM是Model-View-ViewModel的简写,它本质上就是MVC 的改进版.MVVM 就是将其中的View 的状态和行为抽象化,让我 ...
随机推荐
- 550 5.7.1 Client does not have permissions to send as this sender
收发邮件时出现以上这种情况,系统提示550 5.7.1 Client does not have permissions to send as this sender,这是什么原因赞成的呢? 活动目录 ...
- vs2010提取资源
setlocal enabledelayedexpansion rem cd C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin set R ...
- Numpy三维数组的转置与交换轴
二维数组的转置应该都知道,就是行列交换 而在numpy中也可以对三维数组进行转置,np.T 默认进行的操作是将0轴与2轴交换 本文主要对三位数组轴交换的理解上发表本人的看法. a = np.array ...
- 做u盘启动重装系统 进winPE 出现 cdboot:couldn't find ntldr 解决办法
公司的QA本来用的ubuntu系统 觉得不是很好使 就找我重装win10系统 之前有重装过系统 就信心满满的答应了 我拿出U盘 把U盘格式化了下 去下载了个雨林木风的win10 系统(ISO文件) ...
- 使用es6的then()方法封装jquery的ajax请求
使用场景: jsp页面中使用jquery的ajax请求比较频繁,以前vue框架的项目用过axios,所以就想着用then()封装一个公共请求的方法,这样每次请求就不用那么麻烦的写一大堆请求参数了. 示 ...
- jquery中bind和on的区别
1.首先,来看看bind和on的语法. bind的用法: $('a').bind('click',[data],function(){}) 其事件的绑定者是固定的,就是a,第一个参数是事件,第二个参数 ...
- 《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理
<C#从现象到本质>读书笔记(五)第5章字符串 字符串是引用类型,但如果在某方法中,将字符串传入另一方法,在另一方法内部修改,执行完之后,字符串的只并不会改变,而引用类型无论是按值传递还是 ...
- 相对于父元素的fixed定位的实现
问题描述 之前在项目中,遇到了一个场景,需要实现相对于父元素的fixed定位:在父元素内拖动滚动条时,"fixed"定位的元素不能滑动,在外层拖动滚动条时,父元素及父元素内的所有元 ...
- print('{:15}|{:^9}|{:^9}'.format('', 'lat.', 'long.'))是什么意思?
平台:win10 x64+Python3.7.0 先了解下——Python3 字符串格式化 Python字符串的格式化方法分为两种,分别为占位符(%)和format方式. 占位符方式在Python2. ...
- CPU寻址
CPU组成和寄存器 1)CPU由运算器.控制器.寄存器等器件组成,这些器件靠内部总线相连 2)寄存器是CPU的组成部分,用来暂存指令.数据和地址,CPU对其读写速度是最快的,不需要IO传输 存储单元 ...