要想代码写的好,前提配置做的好

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 是单一入口,任务处理、命令行和计划任务都做了单一入口。

最新文章

  1. Solr的主界面加登录权限
  2. python socket 学习
  3. Java类型相互转换byte[]类型,blob类型
  4. 【Android】去除应用启动时黑屏现象
  5. react学习笔记-02
  6. Linux设置静态IP【转】
  7. referrer vs referer
  8. 在Spring Boot框架下使用WebSocket实现聊天功能
  9. 【学习笔记Part 1 ● Linux】
  10. laravel 目录权限
  11. 【你的职业规划】web前端的职业发展方向及学习攻略【转载】
  12. [Node.js] 09 - Connect with Database
  13. Debug版本正常运行,Release版本编译通过但运行崩溃
  14. Hadoop3集群搭建之——安装hadoop,配置环境
  15. 11.6八校联考T1,T2题解
  16. git学习------>从SVN迁移到Git之后,项目开发代码继续在SVN提交,如何同步迁移之后继续在SVN提交的代码到Git?
  17. struts2学习(11)struts2验证框架1.验证简介、内置验证
  18. Android Parcel对象详解
  19. AWS RDS mysql无法连接的问题
  20. 15 更多jQuery知识

热门文章

  1. 【关于使用SpringJUnit4ClassRunner单元测试报错问题】
  2. Config 代码片段
  3. unity 中 protobuff 的用法 一句话攻略
  4. 二分查找——Python实现
  5. JavaScript中解决多浏览器兼容性问题的方案
  6. 谈谈HTML5中的history.pushSate方法,弥补ajax导致浏览器前进后退无效的问题
  7. type="button"和type="submit"的区别
  8. 服务器端渲染VS浏览器端渲染
  9. 【统计学】英文概念之Mean和Average的区别
  10. 扩展javascript原生对象