【转】2013 PHP技术峰会《Bug Free的PHP开发实践分享》摘录
要想代码写的好,前提配置做的好
error_reporting = E_ALL | E_STRICT
display_errors = 测试机设置为 On,生产机设置为 Off
display_startup_errors = On
log_errors = On
error_log = /home/logs/phperror.log
写代码的时候要时刻注意的问题
1、变量必须要初始化,函数或者类的方法的参数要有类型定义;
2、能用 ===、!== 就不用 == 和 != ;
3、对外来变量要做防卫式检查;
4、不要只考虑正常逻辑,多考虑边界情况;
5、涉及 SQL 以及文件操作要想象各种可能性,尽量在框架级别做好约束,不要依赖开发人员的能力;
6、要让好的习惯成为你的本能!
一些经验
1、单入口;
入口对一些容易出问题的事情进行检查和初始化,让程序员可以把精力集中在应用层。
比如服务器时间出错检查,路径初始化,GET、POST、FILES 、SERVER 等全局变量的初始化,等等。
2、用类封装代码;
3、做好 Autoload,善用 NameSpace;
4、接管异常处理,在代码里尽量抛异常;
5、尽量使用原生和 PECL 扩展函数;
6、代码里慎用 @ 符;
7、为对 CDN 更友善,框架默认输出 no-cache 头,需要时再改变,并尽量把动态请求和静态资源分开;
8、如果有文件上传功能,可以在入口处这样处理而不需要程序员来操心删掉临时文件:
register_shutdown_function(
‘removeFILESOnShutdown’
);
9、在允许的情况下,升级到更高 PHP 版本;
10、通过 Xdebug 调试,使用 XHProf 了解性能问题并改进;
11、APC、OpCache、Memcached 还用我说吗?但是在此之上最好再做一层封装,方便以后迁移和调试;
12、多做 Code Review,三个月后再看自己的代码;
13、框架和底层代码一定要经得起最严格的考验;
14、一定要在最严格的方式下开发与测试,最好有独立的测试机;
15、降低未来的维护成本,编码规范与代码规范,要严格执行,前者可以用 PHP_CodeSniffer 在提交到代码仓库时检查;
16、服务分层,图像处理等耗时操作,不要和 web 服务混在一起。一个小技巧,一些无须用户关心的操作,比如记录用户信息,可以集中放到程序最后使用 fastcgi_finish_request() 方法在断开用户连接后执行。
17、MySQL 数据库的运行状态可用 mysqltuner.pl 和 tuning-primer.sh 来检查;
18、服务器以及服务的运行状态,要有及时的监控和报警,没精力,可以用监控宝。
我们自己,走的更远
1、框架会 unset 掉 GET、POST、COOKIE 等相关数据,对一些外来数据做初始化,比如 GET 操作下,FILES 变量会被清空,必须通过我们自己封装的方法进行外来数据的获取;
2、我们针对前端 HTML 代码,分割静态资源并作自动优化,无须人工干预;
3、文件储存实现了统一化,自动去重,这样对开发用户上传内容型的应用非常方便,而且一点都不用担心被上传注入;
4、我们有专门的任务处理服务,通过 FastCGI 协议与前端进行通信,省掉 HTTP 层的开销;
5、不仅 Web 是单一入口,任务处理、命令行和计划任务都做了单一入口。
【转】2013 PHP技术峰会《Bug Free的PHP开发实践分享》摘录的更多相关文章
- 【公开课】【阿里在线技术峰会】何登成:AliSQL性能优化与功能突破的演进之路
MySQL的公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 本文根据阿里高级数据库专家何登成在首届阿里巴巴在线技术峰会上的分享整理而成.他主要介 ...
- 大V云集!参加首届阿里巴巴在线技术峰会的八大理由
由阿里巴巴集团.阿里巴巴技术协会(ATA)和阿里云云栖社区联合举办的首届阿里巴巴在线技术峰会(Alibaba Online Technology Summit)将于7月19日-21日20:00-21: ...
- 2015/10 中外合璧再现辉煌—CCFC2015技术峰会
笔者有幸参加了CCFC技术峰会,现在发布照片几张.大家看一下. 2015年10月14日,CCFC 2015电子数据取证技术峰会于四川成都举办,有200余名一线取证技术人员及国内外各行业专家参会.此次峰 ...
- paip.2013年技术趋势以及热点 v2.0 cae
paip.2013年技术趋势以及热点 v2.0 cae HTML5 多核编程 物联网 可穿戴计算设备 3. 物联网 无论是M2M(机器对机器)通信应用,还是NFC(进距离通信)技术,都是物联网的组成部 ...
- paip.2013年技术趋势以及热点 v3.0 cao
paip.2013年技术趋势以及热点 v3.0 cao 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.cs ...
- 干货云集 WOT 2017全球架构与运维技术峰会揭密技术难点
WOT,World Of Tech专注互联网IT技术领域,是一场不容错过的技术盛会!WOT 2017全球架构与运维技术峰会三大章节,15大技术专场,60+国内外一线互联网精英大咖站台,打造兼顾技术视野 ...
- WOT2016大数据技术峰会——千人技术盛宴
WOT2016大数据技术峰会是一场聚焦大数据领域最前沿的的技术及经验分享.2016年11月25-26日北京粤财JW万豪酒店如约而至,会议规模达到1000人! 由51CTO主办的千人技术盛宴--WOT2 ...
- 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
对于公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为<基于Java容 ...
- 首届阿里巴巴在线技术峰会,9位大V演讲整理!
https://yq.aliyun.com/articles/57826 感谢参加阿里巴巴在线技术峰会.7月19日的3场专家分享:Blink.Docker.电商互动:7月20日的云数据库十大经典案 例 ...
随机推荐
- 【转】C++和Java比较
"作为一名C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且Java的语法无疑是非常熟悉的.事实上,Java本来就是从C++衍生出来的." 然而,C++和Java之间仍存 ...
- bzoj 5252: [2018多省省队联测]林克卡特树
Description 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一个叫做& ...
- js实现页面跳转的八种方式
整理一下JavaScript八种跳转方式,欢迎评论补充! 第一种方法: <script> window.location.replace('http://www.cnblogs.com/c ...
- java泛型使用
泛型的解释 现在感觉泛型是一个值得学习的地方,就抽出时间来学习和总结一下泛型的使用. Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允 ...
- Linux的基本命令总结
服务器版的Linux安装完毕了,但没有图形化界面,我们只能通过控制台去操作系统,我们就要使用类似DOS命令的Linux命令去操作系统,那么下面我们就进行Linux的命令的学习.Linux命令成百上千, ...
- 【转】spring boot使用Druid和监控配置
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012100371/article/details/76602612 Druid是Java语言中最好 ...
- js两个字符串明明一样却判断显示不相等
一.问题 两个字符串看起来一样.类型一样,判断str1==str2时返回false: 二.原因 字符串可能含有其他特殊字符:换行符(%D).空格(%20)...一般不显示. 三.如何判断 encode ...
- es6 class类实例、静态、私有方法属性笔记
实例属性.方法 class Foo { valueA = 100 //第一种实例属性定义,位置:new的实例上 constructor() { this.valueB = 200 //第二种实例属性定 ...
- JS Event 鼠标拖拽事件
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 关于ES7里面的async和await
async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案.目前,async / await这个特性已经是stage 3的建议,可以看看TC39的进度,本篇文章将分享asy ...