因此实际上开发时选择自行设计mvc框架,实现目的如下:
(1) 三层架构完全分离,提高开发过程效率。
(2) 安全,不论xss,csrf,还是试探型攻击,全都在框架层作统一处理。并且绝对不使用存在安全隐患的方法。在tp框架3.2.3中,Common/functions.php里定义的get_client_ip方法使用了不安全的判断方式,逻辑顺序优先获取可以被伪造的HTTP_X_FORWARDED_FOR和HTTP_CLIENT_IP,虽然对格式进行了判断,但是还是有伪造的风险,如果一个网站试图用这个方法来区分来源用户那么很可能导致一次伪造身份攻击。
(3) 目录结构清晰,让人一眼就能看清楚程序架构的层级关系
(4) 代码量少且复杂度低,让后期维护时阅读理解成本降低
(5) 以非硬性方式限制不合理的代码模块调用,比如说,为了保证模块之间的耦合度低,一个控制器不应该用任何方式访问另一个控制器的某个方法,对于这种行为并不应当在框架层做硬性限制,因为项目中或许有特殊需要,使用这种方式可能效果更好。如果在框架里开启调试选项,此类调用会引发一个提示。
(6) 提供安全的数据库查询类库,任何一个动态服务器程序都无法脱离数据库存在,php程序中通常选择连接mysql数据库,对于mysql真正需要用到的方法只有两个,其一是参数化查询,其二是事务处理。
参数化查询是为了防止客户端提交内容进行注入操作。在php程序中,见过很多人写的时候都是先用转义方法转义所有的数据,然后拼接sql语句。这种方式虽然安全,但是对后期维护不友好,因为看上去太乱了。
事务查询一般建议写在数据库的存储过程里,因为这样可以避免网络问题带来的差错,唯一的错误就是数据库崩溃。但是有些时候为了开发效率,并且考虑到内网数据库连接几乎不会遇到网络性能瓶颈,所以允许php程序中写事务操作。
2.1.2 数据库的选择
现如今MySQL 是正在使用的最值得信赖的开源数据库平台,大多数比较流行的并且访问流量大的网站都会选择使用 MySQL数据库,基于其卓越的跨平台、应用程序栈以及瞩目的性能、可靠性和易用性。MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。现在 MySQL Oracle 提供了一个完整的 LAMP框架,任何规模和志向的用户或客户都可以在 LAMP的基础上利用现有的最佳技术来解决方案或者支持构建自己的应用程序和产品。
在当今现代化、多功能处理硬件和软件以及中间件构架涌现的环境中,MySQL 5.5 提供了一组专用功能集,极大地提高了 MySQL的性能、可扩展性、可用性。MySQL5.5 完美融合了InnoDB 存储引擎和MySQL 数据库的优点,提供了高性能的数据管理解决方案,包括:
(1) InnoDB作为默认的数据库存储引擎
InnoDB作为成熟、高效的事务引擎,目前已经广泛使用。本系统使用的MySQL5.5与时俱进,将默认数据库存储引擎修改为InnoDB,与此同时也引进了Innodb plugin 1.0.7。而改进后的优点也是相当显而易见的:InnoDB的数据恢复时间缩短为几分钟。InnoDB Plugin 支持adaptive flush checkpoint, 可以在某些场合避免数据库出现突发性能瓶颈,并且还支持数据压缩存储,节约了存储从而提高了内存命中率。
(2)