摘要: 之前写某些代码的时候,发现用户莫名奇妙地阻塞了,而且这种阻塞的情况还比较难以形容:使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁。不同浏览器不会出现这种情况。 (当时的情况是:需要执行一个非常长时间的脚本,我已经设置了用户断开不中断,无时间限制执行,但是最后发现执行这个脚本的时候,用户就不能访问其他页面了)其实最开始的时候,我并不知道是session把它锁住了,查了半天手册才知道,看来真的是先天不足。 在PHPBugList上面有人提到如下:------Callingsession_start()appearstowaituntilother... 阅读全文
posted @ 2013-09-17 21:37 马宇申 阅读(493) 评论(0) 推荐(0) 编辑
摘要: 现在的语言没有闭包简直都不好意思说出来。 想要了解闭包是什么,那么就必须知道匿名函数。其实看起来他们其实差不多一个意思。 见phpRFC一句话:Endof2007apatchwasproposedthatwouldaddlambdafunctions(butwithoutclosures)toPHP.Duringthediscussiononthemailinglist,severalpeoplesuggestedthatwithoutsupportforclosures,lambdafunctionsarenotusefulenoughtoaddthemtoPHP.Thispropo... 阅读全文
posted @ 2013-09-17 21:36 马宇申 阅读(687) 评论(0) 推荐(0) 编辑
摘要: 好早好早以前计算机网络老师就教了说,邮件嘛,就三个协议smtp,imap,pop3。smtp用来发邮件,imap,pop3用来收邮件。噢?是么。难道没有发现这句话有非常多的漏洞,根本就不能说清楚这个邮件发送的整个过程。发邮件?往哪里发?收邮件?往哪里收。当真的编程的时候就无比蛋疼了。首先总结一句话。完成邮件发送这个整个过程,不管是你发给别人,还是别人发给你,只是通过了smtp协议。换一句话说就是只用postfix,你就可以搭一个邮件服务器。你可以通过它给你的qq邮箱发送,更可以通过qq邮件发送给他。我们还是先跟随一个典型的发送邮件的到接受邮件的过程,看一看smtp,imap,pop3以及pos 阅读全文
posted @ 2013-09-17 21:33 马宇申 阅读(1032) 评论(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 马宇申 阅读(397) 评论(0) 推荐(0) 编辑
摘要: Linux、Windows等操作系统的系统API时间函数一般涉及哪些操作,在高性能要求的程序中频繁调用,是否会影响效率? 这里并非在针对性的确定性能瓶颈,只是曾经看到有评价时间函数的调用是一个代价较高的操作,所以想知道系统时间函数在Linux或Windows下是怎样实现的,这中间涉及哪些过程,进而了解为何有时间函数的调用是“代价较高”的操作这种说法。 个人的理解,所谓开销大不大,要看参照的对象。时间函数比如gettimeofday()本身在所有系统调用里属于调用代价比较小的。之所以说他调用开销高,是因为他是一个系统调用,系统调用要完成用户态->内核态->用户态的转换,可能需要消耗上 阅读全文
posted @ 2013-09-17 21:25 马宇申 阅读(481) 评论(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 马宇申 阅读(1547) 评论(0) 推荐(0) 编辑
摘要: 最最开始的时候经常遇到这个问题,就是如果一个文件里面全部都是php代码的话,我写了前闭合和后闭合的时候,文件一多就容易报错,老是说什么有关输出的错误,貌似大概就是header已经发了。手册上面这个样子说的IfafileispurePHPcode,itispreferabletoomitthePHPclosingtagattheendofthefile.ThispreventsaccidentalwhitespaceornewlinesbeingaddedafterthePHPclosingtag,whichmaycauseunwantedeffectsbecausePHPwillstart.. 阅读全文
posted @ 2013-09-17 21:07 马宇申 阅读(582) 评论(0) 推荐(0) 编辑
摘要: 试想如下情况。如果你的用户正在执行一个需要非常长的执行时间的操作。他点了执行了之后,浏览器就开始蛋疼地转。如果执行5分钟,你猜他会干啥,显然会觉得什么狗屎垃圾站,这么久都不响应,然后就给关了。当然这个是一个极端的情况。但是我们不乏这种需求,需要用户关闭请求之后也能够做事情。脚本继续执行。再考虑另外一种情况。如果我们现在正在做一个非常精确的事情,用户一旦断开(异常或者是正常)之后必须要执行一些操作,比如他掉线了,我们需要把他的在线状态清空。基于有这样的需求,我找到了ignore_user_abort这个函数。 当调用ignore_user_abort(1)时,就设定了忽略用户退出这个标志... 阅读全文
posted @ 2013-09-17 21:05 马宇申 阅读(2076) 评论(0) 推荐(0) 编辑
摘要: 偶然机会看到了flush()。知道他的神奇功能可以用在异步传输的comet模式之后,于是我去试了试这个方法。然后翻手册去看了看什么意思。发现它神奇的和ob类函数在一起。有点好奇,先放一放,来说flush的作用。手册上面这样说:flush()maynotbeabletooverridethebufferingschemeofyourwebserverandithasnoeffectonanyclient-sidebufferinginthebrowser.Italsodoesn'taffectPHP'suserspaceoutputbufferingmechanism.Thism 阅读全文
posted @ 2013-09-17 21:03 马宇申 阅读(403) 评论(0) 推荐(0) 编辑