升级到PHP 7.0

升级到PHP 7.0
这个月月初PHP 7.0终于Release了(虽然跳票了几次),由于从底层彻彻底底的改动,并且同时语言本身仍然保持着对老版本的高度兼容,使得很多现有程序(比如WordPress)能够通过升级到PHP7.0而获得免费的巨额性能提升。由于底层采取了不同于原来的编译技术(JIT),让PHP7.0获得了可以匹敌其他编译型语言的性能优势,曾经Facebook开发的HHVM(HipHop Virtual Machine)其实就是在做这件事,不过这项技术在PHP上的应用毕竟还年轻,所以还需要时间来打磨。当然,PHP7.0也做了其他语言内部的改进,这些改进大多都是对开发者透明的,所以本博客的升级才能如此的轻松顺利。不知是不是心理作用,感觉好像变快了_(:з」∠)_ 下面记录一下我的升级日志: 首先升级了apt,不然会在安装过程中出现某些依赖无法解决的问题,使用下面的指令 [crayon-5a0f0490d1f3f684137453/] 然后我是用PPA的源来安装的(省时省力),所以要先把源加进来 [cra...

Laravel框架实战:增加表单专用Model

随着进一步使用Laravel框架,感觉也需要对MVC模式进行重新的梳理。在原有的代码中,网页上的表单提交后,在控制器中是通过: [crayon-5a0f0490d228e041729347/] 来提取,取得的内容为表单的name => value键值对,随后我们再在控制器中编写相应的校验规则来对这些参数的合法性进行检验,并根据检验结果来控制页面的跳转。然后随着这样的代码越写越多,我们也就发现了这样写法可能会带来的问题: 当表单发生变化的时候,必须要找到表单action所对应的控制器的对应代码来进行修改; 需要通过使用Input::All()数组来获取内容,这使得代码中势必要出现大量的Magic string,不利于系统未来可能发生的重构; 针对表单->实体模型的转换,每种转换都需要在Controller中编写,在修改转换逻辑的时候会造成不便(例如,用户注册的表单并不是直接和数据库中的用户表对应的,用户注册表单的数据需要一定处理后才能被存入数据表) …… 这些主要就是...

Laravel框架初识:扩展Auth功能

Laravel框架初识:扩展Auth功能
最近在尝试使用Laravel框架进行一些实际开发,框架本身提供了很多常用的Web应用的机制和库,虽然很好用,但是却不能包容我预期的设计,比如Auth模块,该模块提供了两种很基本的验证驱动,一个是Database,使用QueryBuilder来与数据库进行交互,另一个是Eloquent ORM,是采用其内置的ORM库来进行数据库交互(感觉类似于.Net中的EF),但是不论采取哪种驱动,都存在同样的局限性: 必须采用内置的Hash方案对入库的密码进行保护 这一局限使得原本系统设计中的MD5 + Salt方案受到了阻挠,尽管实现会稍显麻烦,但我仍然认为这种方案更适合于我的项目,因此我参考了Laravel文档中扩展章节所述的Auth模块扩展以及网上查阅的一些资料,来对原框架进行修改,使其能够支持有我自己定义的验证驱动。 首先介绍我所考虑使用的MD5 + Salt方案的具体设计: 数据库中不应该存储密码明码应该是一个基本安全常识,通常的方案是采用MD5算法对密码进行Hash,再存入数据库,从而避免数据库泄

PHP的include的有趣用法

PHP的include的有趣用法
在最近做的项目之中,用到了php的include方法来使得庞大的类的成员函数的内容独立出来,我们都知道include方法是将外部的一个文件引用进来,但是include有一些特殊的地方就是,它并不像C语言的宏那样是在程序运行前将需要的文件替换进来的,所以这样会导致一些问题,请看下面的代码: [crayon-5a0f0490d2b3e124615987/] 请注意这个类中的三个方法,Test1用作对照。 在inc.php中的代码是这样的: [crayon-5a0f0490d2b43300661737/] 那么猜测一下Test2的运行结果会是怎样的?很显然,这样做是不正确的,在include后引用文件的代码会作为单独的一个代码区运行(但是很显然,这部分代码区会和引用处的代码区共享内存),但是在include语句中的return语句并不会被认为是外部函数的return,这使得include可以像无参数的一样使用,我们加入Test3: [crayon-5a0f0490d2b45159345704/] 然

捣鬼的BOM

捣鬼的BOM
最近在做的一个Web项目时遇到了很恼人的问题,就是模板的结合点(特别是头部)会出现一个定宽的白条。我在用Opera的“元素审查”查看页面的时候,发现实际解析的页面已经完全崩坏了,标签及其内容直接丢失,只剩下一个,而原模板代码里的部分全部都被挪到了里。因为纠结于此现象的产生原因很长时间没有结果,而且莫名其妙的标签被吃掉,所以我称此现象为崩裂!! 在后来使用IE的开发者工具以及Chrome的“审查元素”后发现,那个白条的部分被解析为一个“文本”,而从工具上显示的情况来看,这个文本是实实在在的空文本,多次检查模板文件未果后,尝试去网络上搜索相关的情况,但也因没有找到合适的搜索关键词而毫无进展……后来排查PHP代码,由于我使用的是CI框架(CodeIgniter [1]),所以最后问题就锁定在了一个Model类上,只要加载了这个类,就会导致崩裂,可是反复检查代码N遍,的的确确没有错啊,甚至于都翻到了CI的Model核心文件,依然无果……万念俱灰……十分绝望,于是罢工N天 ’ 3 ` 。但是不能永远这样下去吗,于是