摘要: 随着web的发展,仅一门语言或者一种技术已经不能满足需求,分层架构显得越来越重要。在大型架构中,从来不会简单地应用php从头到尾实现一个完整的mvc架构。可能底层是c/java的支撑,负责密集运算和yu与数据库的交互。表现层用javascript+PHP完成,js负责前端大部分业务逻辑he和... 阅读全文
posted @ 2013-09-17 21:52 马宇申 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 苦恼蛋疼的曾哥工作室,让人痛不欲生,缓慢的同步速度,另人恼火的插件配置,让人疯狂的卡。简直是让人用了几天之后就不行了。废话不多说,一款很好的phpIDE。1.phpStorm下载here2.注册UserName:EMBRACELicenseKey:(直接复制)=====LICENSEBEGIN=====43136-1204201000002UsvSON704l"dILe1PVx3y4"B349AU6oSDJrsjE8nMOQh"8HTDJHIUUhgd1BebYc5U"6OxDbVsALB4Eb10PW8"=====LICENSEEND==== 阅读全文
posted @ 2013-09-17 21:49 马宇申 阅读(1102) 评论(0) 推荐(1) 编辑
摘要: 之前一直用vim 写PHP, 总觉得IDE的一大堆没有用的插件非常麻烦,所以一直避免使用Zend_Studio。不过随着PHP的发展和框架的发展,以及个人的发展,最后还是回到的IDE的时代。 在使用Zend_Studio之前,需要装几个比较有用的东西才能满足之前的开发需要。 1. 使用ssh 来获取 阅读全文
posted @ 2013-09-17 21:48 马宇申 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 在上一节中,我们提到了如何创建一个Bunlde 并且在默认控制器中添加一些方法。如果有参照之前的说法进行的话,读者很有可能会被提示说 返回的Response对象不能为空。好啦,我们就来研究一下,怎么从请求中读取数据,并且使用Controller 提供的 Response来给请求一个适当的返回值。 在 阅读全文
posted @ 2013-09-17 21:47 马宇申 阅读(652) 评论(0) 推荐(0) 编辑
摘要: 如果说,这个时候你萌生了一个去看一看Symfony源码的想法,个人建议还是算了,看了之后,你就会感到非常迷茫。因为他实在是大于绝大部分你使用过的框架,并且有多达近二十个的插件,使用了一些非常精巧的设计模式把各个部分有序优雅地组合在一起,并且使它们work well and fast ! 从现在起我们 阅读全文
posted @ 2013-09-17 21:46 马宇申 阅读(488) 评论(0) 推荐(0) 编辑
摘要: 经过上一篇文章之后,我们呢,可以访问这个默认的页面,你也会看到一堆高级的debug工具。好了,这次我们开始更多地了解这个symfony2.0。 首先我们要明白一点,Symfony2 的配置是一个着实很让人捉急的事情,但是呢并不可怕,尤其是你非常熟练的使用了这种路由规则之后,你就会发现,他比 thin 阅读全文
posted @ 2013-09-17 21:44 马宇申 阅读(502) 评论(0) 推荐(0) 编辑
摘要: 最近,大概研究了一下php中的j2ee框架(很多j2ee的思想)。介于国内对于Php的认可程度还停留在石器时代,多数的开发者,还在写php4时代的代码,也就更谈不上使用像Symfony这样oop的框架。大部分国内框架包括比较出名的ThinkPHP,也不过是套着一个oop的壳子,写着过程化的代码,连国 阅读全文
posted @ 2013-09-17 21:40 马宇申 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 之前写某些代码的时候,发现用户莫名奇妙地阻塞了,而且这种阻塞的情况还比较难以形容:使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁。不同浏览器不会出现这种情况。 (当时的情况是:需要执行一个非常长时间的脚本,我已经设置了用户断开不中断,无时间限制执行,但是最后发现执行这个脚本的时候,用户就不能访问其他页面了)其实最开始的时候,我并不知道是session把它锁住了,查了半天手册才知道,看来真的是先天不足。 在PHPBugList上面有人提到如下:------Callingsession_start()appearstowaituntilother... 阅读全文
posted @ 2013-09-17 21:37 马宇申 阅读(491) 评论(0) 推荐(0) 编辑
摘要: 现在的语言没有闭包简直都不好意思说出来。 想要了解闭包是什么,那么就必须知道匿名函数。其实看起来他们其实差不多一个意思。 见phpRFC一句话:Endof2007apatchwasproposedthatwouldaddlambdafunctions(butwithoutclosures)toPHP.Duringthediscussiononthemailinglist,severalpeoplesuggestedthatwithoutsupportforclosures,lambdafunctionsarenotusefulenoughtoaddthemtoPHP.Thispropo... 阅读全文
posted @ 2013-09-17 21:36 马宇申 阅读(685) 评论(0) 推荐(0) 编辑
摘要: 引用计数以及是否是引用变量,一个神奇的函数,查看当前引用计数:1 输出:a: (refcount=2, is_ref=0)='new string'也就是说当你把一个变量赋值给另外一个变量的时候,实际上并没有复制容器,而是引用赋值。当你真正需要修改的时候,才会复制这个容器。当refcount=0的时候,这个容器也就被删除了,每次unset操作把容器的refcount值减少1。类似的,数组和对象也是这个工作原理,他们只不过是一个符合的容器,但是这样a: (refcount=2, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)=&# 阅读全文
posted @ 2013-09-17 21:33 马宇申 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 好早好早以前计算机网络老师就教了说,邮件嘛,就三个协议smtp,imap,pop3。smtp用来发邮件,imap,pop3用来收邮件。噢?是么。难道没有发现这句话有非常多的漏洞,根本就不能说清楚这个邮件发送的整个过程。发邮件?往哪里发?收邮件?往哪里收。当真的编程的时候就无比蛋疼了。首先总结一句话。完成邮件发送这个整个过程,不管是你发给别人,还是别人发给你,只是通过了smtp协议。换一句话说就是只用postfix,你就可以搭一个邮件服务器。你可以通过它给你的qq邮箱发送,更可以通过qq邮件发送给他。我们还是先跟随一个典型的发送邮件的到接受邮件的过程,看一看smtp,imap,pop3以及pos 阅读全文
posted @ 2013-09-17 21:33 马宇申 阅读(1027) 评论(0) 推荐(0) 编辑
摘要: Linux、Windows等操作系统的系统API时间函数一般涉及哪些操作,在高性能要求的程序中频繁调用,是否会影响效率? 这里并非在针对性的确定性能瓶颈,只是曾经看到有评价时间函数的调用是一个代价较高的操作,所以想知道系统时间函数在Linux或Windows下是怎样实现的,这中间涉及哪些过程,进而了解为何有时间函数的调用是“代价较高”的操作这种说法。 个人的理解,所谓开销大不大,要看参照的对象。时间函数比如gettimeofday()本身在所有系统调用里属于调用代价比较小的。之所以说他调用开销高,是因为他是一个系统调用,系统调用要完成用户态->内核态->用户态的转换,可能需要消耗上 阅读全文
posted @ 2013-09-17 21:25 马宇申 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 今天看php手册,结构流程控制语句,翻到个没见过的关键字declare(申明的意思)。于是稍稍看了下。大概意思是:定义一段代码。关于他合适执行,怎么执行完全依照他的参数。 反正不知道什么意思。先来一段实例代码 1 每每执行declarestatement里面的tick步就会调用已经注册的function一次。用来跟踪变量,跟踪时间,跟踪内存使用,监测连接断开等等,应该都是非常合适的。 备注:ticks代表步长; 另外对于declare来说还有另外一个参数是encoding暂时没懂怎么用,评论上都没提,好像是一个新的属性之类的 另外php支持goto语句,和c语言一样的写法 阅读全文
posted @ 2013-09-17 21:12 马宇申 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 之前做聊天室的时候有那么个需求就是当用户异常断线的时候就应该清除她的在线状态。因为当时对于flush不够了解,尝试了各种办法,好像都没办法在我们开发机上面执行相应的代码。后来知道是flush的原因。我现在就把所有尝试过的办法都相应地说一次.第一最开始的时候,看到了一个regist_shutdown_function()简直是激动惨了。结果后来才知道有好哈。不过是脚本完成或者中断的时候提供一个方法来执行相应的代码。并且在这个里面注册的函数相当的有限(虽然可以把这样传入array($this,method))但是对于环境中的已经存在的函数和类的使用受到了很大的限制,并且对于某些系统函数或者类的支. 阅读全文
posted @ 2013-09-17 21:10 马宇申 阅读(1544) 评论(0) 推荐(0) 编辑
摘要: 最最开始的时候经常遇到这个问题,就是如果一个文件里面全部都是php代码的话,我写了前闭合和后闭合的时候,文件一多就容易报错,老是说什么有关输出的错误,貌似大概就是header已经发了。手册上面这个样子说的IfafileispurePHPcode,itispreferabletoomitthePHPclosingtagattheendofthefile.ThispreventsaccidentalwhitespaceornewlinesbeingaddedafterthePHPclosingtag,whichmaycauseunwantedeffectsbecausePHPwillstart.. 阅读全文
posted @ 2013-09-17 21:07 马宇申 阅读(577) 评论(0) 推荐(0) 编辑
摘要: 试想如下情况。如果你的用户正在执行一个需要非常长的执行时间的操作。他点了执行了之后,浏览器就开始蛋疼地转。如果执行5分钟,你猜他会干啥,显然会觉得什么狗屎垃圾站,这么久都不响应,然后就给关了。当然这个是一个极端的情况。但是我们不乏这种需求,需要用户关闭请求之后也能够做事情。脚本继续执行。再考虑另外一种情况。如果我们现在正在做一个非常精确的事情,用户一旦断开(异常或者是正常)之后必须要执行一些操作,比如他掉线了,我们需要把他的在线状态清空。基于有这样的需求,我找到了ignore_user_abort这个函数。 当调用ignore_user_abort(1)时,就设定了忽略用户退出这个标志... 阅读全文
posted @ 2013-09-17 21:05 马宇申 阅读(2057) 评论(0) 推荐(0) 编辑
摘要: 偶然机会看到了flush()。知道他的神奇功能可以用在异步传输的comet模式之后,于是我去试了试这个方法。然后翻手册去看了看什么意思。发现它神奇的和ob类函数在一起。有点好奇,先放一放,来说flush的作用。手册上面这样说:flush()maynotbeabletooverridethebufferingschemeofyourwebserverandithasnoeffectonanyclient-sidebufferinginthebrowser.Italsodoesn'taffectPHP'suserspaceoutputbufferingmechanism.Thism 阅读全文
posted @ 2013-09-17 21:03 马宇申 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 一、fsocketopen,使用这个的过程看起来更像别的语言的socket编程public function send($request) { /* 请求数据 */ $post_data = $request; $lenght = strlen($post_data); $headers = "{$this-... 阅读全文
posted @ 2013-09-17 21:00 马宇申 阅读(1022) 评论(0) 推荐(0) 编辑