资源描述:
《Codeigniter的一些优秀实践》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、绘近准备接手改进一个别人用Codeigniier写的项H,虽然Z前也有用过CI,但是是完全按着自己的意思写的,没按CI的一些套路。用在公众的项目,最好还是按框架规范来,所以还是总结一下,免得以后别人再接手的时候贻笑大方。1.首先是MVC如果你还不知道MVC,应该尽快的学习,你会很快的体会到在Model中数据访问,在Controller中进行业务逻辑,在Views中编写HTML代码的价值。如果你Z前没有使川过这种模式写过程序,你也许会皱起额头,不过你应该给口己尝试这样做的机会。一条实践准则是把更少的东西放进Controller
2、,记住DRY准则:不要重复造轮子。当在超过一个地方编写相同的代码时,应该根据它的类型來尝试编写一个library,helper,或model.比如数据库连接类,用得很频繁,就把它做成model(系统已提供)。一旦领悟了MVC的精餉,这将会成为一种习愤,你会从MVC简洁的代码小受益良多。一个原则就是:复杂的操作都交给Model,Controller更像个建筑师。Model是苦工。View是粉刷工。Controller只需要把东西丢进Model.1就可以了,不需要在意数据是否异常,然后返回一个标志位以及相应的数据。这样MVC的架
3、构就体现出来了。Model其实就像一个电器如:微波炉一样,使用方法越简单越让人喜欢,(把食物放进去一按启动一ok,饭熟了。)接口少的好处是,Model升级代码优化的时候,对外界的耦合度不高。即使你内部写得很烂,接口也很干净,用起來也简单。2.Application和System路径域好是把system和application文件夹放在webroot以外的地方,如果index.php放在FTP服务器的/public,html/路径下,应该尝试把System放在根目录下/system,这样的话,只能通过index.php访问你的
4、PHP文件。不要忘记在index.php文件中修改$system_folder和$application_folder的值,$systcm_folder的值应该是相对于index.php文件,而$application_foldcr的值是相对于system目录。3.错误报告和调试常常犯的一个错误是忘记关闭PHP错误和数据库错误报告,这样做是有风险的。在任何一个公开的站点,crror_rcporting应该设置为0,最多只能设置为E_ERROR,数据库设置db.debug应该设置为false,基于其他安全考虑,设置不显示出错信
5、息ini_set('display_errors','Off');在你编码和调试时,应该把error-reporting设登为E.ALL,并且在把应用程序发布前解决每一个注意和警告。—种简易的方法是在application/config/database.php文件设置db_debug的值为一个常量MP_DB_DEBUG,当网站在运行中,如下设置:1ini_set('display_errors,,'Off');2error_reporting(0);3define(,MP_DB_DEBUG,,false);在编码和调试中设
6、置为:1ini_set(,display_erT()rs','On');2error_reporting(E_ALL);3define(,MP_DB_DEBUG,,true);1.安全问题很重要在接收任何数据到你的程序之前,不管是表单提交的POST数据、COOKIE数据、URI数据、XML-RPC数据、述是SERVER数组中的数据,我们都推荐你实践下面的三个步骤:1.过滤不良数据.2.验证数据以确保符合正确的类型,长度,大小等.(冇时这一步骤也可取代第一步骤)3.在捉交数据到你的数据库之前将其转换.关于SQL注入,XSS,以
7、及CSRF,你应该先了解它们,再决定是否釆用方法来防止它们。可以参考CI手册上的安全指南以及输入和安全类。也许最重要的原则是在把数据提交到数据库或文件系统Z前检查所冇用户的输入。•SQL注入。使用CI自带的ActiveRecord可以解决这个问题。•XSS(跨站脚本)。通过设置$config['global_xss_filtering']=TRUE:开启自动过滤POST和COOKIE中的跨站脚本攻击,但需要消耗一些资源。也可以在每次处理POST和COOKIE的时候单独使用,把第二个参数设为TRUE,如$this->input
8、->post('some_data',TRUE);表单验证类也提供了XSS过滤选项,如$this->form_validation->set_rules(*username*,'Username','trimlrequiredlxss_clean');•CSRF(跨站请求伪造)。CI2.0