msgbartop
PHP源码分析,Zend引擎分析,Web相关技术研究,Web技术分享–左手代码 右手诗
msgbarbottom

04 Apr 08 由signal想到的

signal(int sig, void(*func)(int))是信号注册函数。它可以定制对于特定的信号(sig)的处理函数。
昨天偶然看到他的申明式的时候,把我搞的有点糊涂
#include
void(*signal(int signo, void(*func)(int)))(int);
仔细理解了半天,终于搞清楚了它的定义式,也解开了我长期以来的一个误区:
1. void(*func)(int):
定义了一个函数指针,他的类型是,指向一个返回是void,参数的int的函数类型的指针,就好像 int i, 定义了一个可以存储int型的变量的i。
2. 由上,signal的定义可以如下解释。
signal(int signo, void(*func)(int));
定义了,signal函数接受俩个参数一个是int signo,一个是一个回调的函数指针。
void(* signal(….))(int);
定义了,signal的返回类型是一个函数指针,指向一个返回空的,接受一个整形参数(信号值)的函数;
这么解释,就好多了,再看看简化的定义式,就更明白了(Plauger 1992):
typedef void sigfunc(int);
sigfunc *signal(int, sigfunc *);
由此,我结合fork进行了一番试验, 来验证,子进程是否既成父进程的信号处理函数……

04 Apr 08 在PHP Module中获取$_GET/$_POST/$_COOKIE的方法研究

  最近在做一个PHP的安全模块,其中要在Module的函数中获取用户的Cookie,从而生成签名;今天找遍Baidu/Google,一点相关资料都 没有,不得已,只好给yahoo PHP dev mail list发了求救信。后来,偶然在Google上看到了一个变量 http_globals ,眼前一亮,虽然没有详细资料,但经过一顿试,N次Segmentation fault以后,终于成功!

03 Apr 08 var_export 与 var_dump的不同

最近又发现了一个使用var_export和var_dump的不同点….

01 Apr 08 关于调用约定(cdecl、fastcall、stcall、thiscall) 的一点知识

当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个、什么样的参数。即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。

函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者调用者、或者函数本身修改堆栈,使堆栈恢复原装。在参数传递中,有两个很重要的问题必须得到明确说明:

1) 当参数个数多于一个时,按照什么顺序把参数压入堆栈;

2) 函数调用后,由谁来把堆栈恢复原装。

3)函数的返回值放在什么地方

05 Jan 08 深入Mysql字符集设置

根据Chaos Wang的PPT整理而成, 在此再次感谢Chaos Wang的此次TechTalk

16 Dec 07 PHP:Header

PHP header()
The function declaration: void header ( string string [, bool replace [, int http_response_code]])
The optional replace parameter indicates whether the header should replace a previous similar header, or add a second header of the same type. By default it will replace(true);

11 Dec 07 Perl的特别之处

因为项目需要, 要改进一个抓取网页内容的脚本, 用到了perl,从刚开始看到别人的perl脚本就感觉象天书,到今天已经正常work了一天一夜的脚本, 这三天时间里的一些收获,主要是一些,大家一般来说不太容易理解的概念,或者说是,在C/C++,PHP,JAVA,JS中不常见的一些个语法, 给初学perl的朋友一些启示, 当然,对于perl牛人来说,就不值得一看了….

15 Nov 07 一个误区(关于javascript的字符串拼接)

作者: laruence(http://www.laruence.com)
本文地址: http://www.laruence.com/2007/11/15/10.html
转载请注明出处

cT=”0″;nc=”#444444″;nBgc=”";nBorder=”#196FCB”;tc=”#FFFFFF”;tBgc=”#19A1FE”;tBorder=”#196FCB”;tDigg=”%E6%8E%A8%E8%8D%90″;tDugg=”%E5%B7%B2%E8%8D%90″;defaultItemUrl=”WEB_URL”;defaultFeedUrl =”http://www.laruence.com/feed”;

前段时间听说了一个问题,说是,javascript中使用+=来拼接字符串会比使用Array的join方法慢几十倍以上,今天在工作间歇,就写了个例 子验证了一下,结果确完全相反,使用+=比join要快(在50000个简单拼接循环)200多milliseconds,真是很意外,最后经过仔细研 究,发现原因再于,我使用的测试环境,Firefox(Ubutun), 呵呵,原来是这样的。 在IE下,确实使用Join要比+=快几十倍,但,在IE下它们整体要比firofox慢1个数量级; 在ie下解释为什么+=比join慢的原因,是因为,在IE下,String是固定内存的,每次+=都会重新分配内存。而使用Array的join方法则不会。 而为什么IE下整体要比firefox慢,是因为,IE的垃圾回收机制,每次重新分配内存以后,都会回收废弃的内存,目前只是猜测,因为IE的整体内存使 用要比firefox少很多,firefox的垃圾回收机制是和IE完全不一样的。还没有经过验证,但知道这个结论就够了。 不过,目前来说,因为绝大多数网民还是使用IE系列的浏览器多点,所以在大型的js工作中,还是可以考虑用Array的join代替+=。

06 Nov 07 授人渔而非鱼

作者: laruence(http://www.laruence.com)
本文地址: http://www.laruence.com/2007/11/06/9.html
转载请注明出处

cT=”0″;nc=”#444444″;nBgc=”";nBorder=”#196FCB”;tc=”#FFFFFF”;tBgc=”#19A1FE”;tBorder=”#196FCB”;tDigg=”%E6%8E%A8%E8%8D%90″;tDugg=”%E5%B7%B2%E8%8D%90″;defaultItemUrl=”WEB_URL”;defaultFeedUrl =”http://www.laruence.com/feed”;

慢慢的,2年多了,会想起来这俩年作PHP的过程, 发现一个问题, 如果你能在你开始的时候遇到一个很会帮助你的人, 你将会成长的很自然,很快。
还记得刚来国关的时候,因为高调,和黄胖子一拍即合,无比激情的创建了我们的工作室, 还记得第一个工作是,羽毛球俱乐部,呵呵,在那之前,我根本就没有写过PHP, 那个时候,就是,黑色的屋子,一本书《php和mysql编程宝典》(当然,现在看来这本书,并没有多好), 然后就是百度, 我只能说, 百度 那个时候是我的唯一的老师。。呵呵
自己摸索了大半年,搞了一套CMS出来, 那段时间,真是要看孩子一样对待它,整了一堆的版权申明阿,copyright阿,呵呵,现在看起来,还是挺像那么回事的。
扯远了, 不记得什么时候加入了一个PHP QQ群, 慢慢的我发现,问我问题的人越来越多了,刚开始,我还是挺耐心,但,人多了,实在是, 同样的问题,不同水平层次的人, 终于明白为什么以前老觉得那些牛人怎么那么牛,说话高深莫测,嘿嘿,都是懒得多说一句话。。。。
所以,我觉得,当一个人,尤其是新手,请教你问题的时候,其实,你不必要回答的非常完全,点到即可, 你要让他明白如何去解决以后类似的问题,一次,2次,他就不会再轻易的问一些很简单的问题。 而,再问你问题的时候,或许你也就会对这个问题感兴趣, 也许是你没有注意过的。或许是有趣的,这样,你们之间的这种互动,就更能让他们快速成长了。 当然,对于你自己也是很有益的,记得上次有个家伙问我__autoload()的问题,呵呵
就是刚刚被一个小孩子给烦的。。。。一下想了这么多,不知道归什么类了。。。
还有,就是一定要耐心的去解决别人的问题, 高调就不唱了,单单说,因为往往很多他们遇到的问题, 你可能没有遇到过, 而到了一个阶段,经验的积累,才是能让你再次进步的主要途径了。。。

03 Oct 07 VIM中文乱码解决方案

作者: laruence(http://www.laruence.com)
本文地址: http://www.laruence.com/2007/10/03/5.html
转载请注明出处

cT=”0″;nc=”#444444″;nBgc=”";nBorder=”#196FCB”;tc=”#FFFFFF”;tBgc=”#19A1FE”;tBorder=”#196FCB”;tDigg=”%E6%8E%A8%E8%8D%90″;tDugg=”%E5%B7%B2%E8%8D%90″;defaultItemUrl=”WEB_URL”;defaultFeedUrl =”http://www.laruence.com/feed”;

set langmenu=zh_CN.utf8
set fileencodings=utf-8,cp936,big5,latin1
set ambiwidth=double
let $LANG=’en’
或者也可以:
set encoding=utf-8
set fileencodings=utf-8,chinese,latin-1
if has(“win32″)
set fileencoding=chinese
else
set fileencoding=utf-8
endif
“解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
“解决consle输出乱码
language messages zh_CN.utf-8
下面的方法经过我测试,是可以完美解决的,第一种没有经过测试

Pages:  1 2 3 ...5 6 7 8 9 10 11 12 13