- 博客(23)
- 收藏
- 关注

原创 PHP中的hash碰撞的攻击实例
关于哈希碰撞和PHP中的哈希算法,去大神那看吧http://www.laruence.com/2011/12/30/2435.html网上还有很多讲解,这里就不介绍了。介绍个简单的碰撞实例步骤一:生成一个文件,里面就是我们要使用的参数,也就是一堆要碰撞的hashkey 代码(data.php): $arr=array(); $t=pow(2,16)
2013-01-24 15:02:00
606
原创 服务器维护手记-crontab引起大量sendmail进程打死内存问题
一大早起来,发现个人网站又报警了,前两天刚加了2G内存,我了个去。。。。上机器查日志 /var/log/messageAug 29 07:31:06 AM9YCYMHJM kernel: [ 7539] 0 7539 43237 385 0 0 0 curlAug 29 07:31:06 AM9YCYMHJM k
2015-08-29 10:09:57
3239
原创 memcache扩展0.2版本和0.4版本差异(二)
看看get_version的代码PHP_FUNCTION(memcache_get_version){ mmc_t *mmc; int inx; char *version; zval *mmc_object = getThis(); if (mmc_object == NULL) { if (zend_get
2013-01-16 20:20:13
415
原创 memcache扩展0.2版本和0.4版本差异(一)
从方法列表里,可以发现,增加了两个对外开放的方法:pconnect和close还是挨个看看每个方法做了哪些改进:实际上connect和pconnect走的是同一个方法php_mmc_connect,参数不同,从参数persistent可以看出pconnect是建立持久化连接在php_mmc_connect中,允许的参数个数改变了,0.2版本,主机和端口是必选参数,在0.4版本里,端
2013-01-16 13:20:09
452
原创 memcache扩展(0.2版本)源代码讲解(memcache_increment)
increment和decrement走的同一个方法 php_mmc_incr_decrPHP_FUNCTION(memcache_increment){ php_mmc_incr_decr(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);}PHP_FUNCTION(memcache_decrement){ php_mmc_in
2013-01-14 20:43:14
432
原创 memcache扩展(0.2版本)源代码讲解(memcache_delete)
从MC中删除数据的代码如下:PHP_FUNCTION(memcache_delete){ zval *id, **key, **time; 注:当前MC对象在内存中的地址,要删除的key,及时间 mmc_t *mmc; 注:连接对象 int inx, result, real_time; 注:连接id int ac = ZEND_NU
2013-01-14 18:29:59
445
原创 memcache扩展(0.2版本)源代码讲解(memcache_get)
根据key从MC中取数据,核心代码如下:PHP_FUNCTION(memcache_get){ zval *id, **key; 注:id 保存当前对象在内存中的地址,key保存键名 mmc_t *mmc; 注:连接对象 int inx, flags = 0, data_len = 0; char *data = NULL;
2013-01-14 16:00:13
920
原创 memcache扩展(0.2版本)源代码讲解(memcache_set)
PHP_FUNCTION(memcache_add){ php_mmc_store(INTERNAL_FUNCTION_PARAM_PASSTHRU,"add");}PHP_FUNCTION(memcache_set){ php_mmc_store(INTERNAL_FUNCTION_PARAM_PASSTHRU,"set");}PHP_FUNCTI
2013-01-14 14:53:25
1162
原创 memcache扩展(0.2版本)源代码讲解(memcache_get_version)
PHP_FUNCTION(memcache_get_version){ zval *id; 注:zval结构,用来保存调用该方法的当前对象 mmc_t *mmc; 注:memcache连接对象 int inx; char *version; 注:版本信息字符串 if ((id = getThis()) != 0) {
2013-01-14 13:07:53
470
原创 memcache扩展(0.2版本)源代码讲解(memcache_connect)
为什么要从0.2版本看,因为简单,代码量少//内核中的MC连接代码PHP_FUNCTION(memcache_connect){ zval **host, **port, **timeout; 注:三个zval结构,分别代码主机地址,端口,超时时间,都是二级指针。 mmc_t *mmc = NULL;
2013-01-08 14:18:17
1082
翻译 Extending and Embedding PHP-扩展和移植PHP(九)
数据创建现在你已经学会怎么从zval里面取数据了,是时候创建自己的数据了。zval可以在方法前面声明严格的变量,可以存在本地,也可以被复制离开这个方法,进入用户空间。因为你总是想以某种形势让你创建的zval变量进入用户空间,想分配一块内容给这个变量,并把一个zval指针指向它。再次声明,使用malloc(sizeof(zval))并不是一个好的方式,而应该使用MAKE_STD_ZVAL(p
2012-12-23 23:09:57
729
翻译 Extending and Embedding PHP-扩展和移植PHP(八)
第二章 由里到外讲变量每种程序语言最常见的就是存取变量,PHP也不例外,虽然很多语言都要求在使用之前声明变量类型,但PHP可以虽然声明变量,存储任意类型的值。当需要存储时,会马上转为需要的类型。由于你使用PHP的关系,可能你对此不熟悉,在本章里,我们将讲解PHP的父语言-C,在C里变量是怎样编码的,在C里变量需要严格的类型声明。当然,给变量编码只是工作的一半,为了保存这些信息,还需要一
2012-12-22 15:21:36
586
翻译 Extending and Embedding PHP-扩展和移植PHP(七)
不可预知的全局存取:在创建扩展时,你不知道运行的环境是否需要线程。通常情况下,在头文件里会定义ZTS标志,当PHP在线程安全环境下运行时,或者由于SAPI的需要,或者由于设置了这个enable-maintainer-zts参数,就会通过类似这种指令#ifdef ZTS来定义。正如你前面看见到,只有在线程安全池里分配资源是有意义的,并且PHP被编译运行在线程安全的环境下。这就是为什么在前面要
2012-12-17 20:42:57
2183
翻译 Extending and Embedding PHP-扩展和移植PHP(六)
zend 线程安全在PHP发展初期,只做为单进程CGI方式运行不关心线程安全,因为进程空间不会在请求执行完后还存在,一个内部变量只要被正确的初始化,就能在全局范围内声明,存取和改变,且不计后果。任何没有被清理的资源都会在CGI进程销毁时被释放。后来,PHP被嵌入到多进程的WEB服务器中,例如APACHE,一个内部变量仍然能够通过动态的请求被全局定义和安全的存取,只要在请求的开始它被正确的初
2012-12-13 15:59:11
990
翻译 memcache通信协议(一)
memcache的客户端和服务器端的通信通过TCP连接(UDP也是可以的,具体内容在UDP协议里),memcache服务器端监听一些可配置的端口,客户端连接到这个端口,向服务器端发送命令,读取响应,关闭连接。没必要发送命令去关闭这个会话。客户端只有在完全不需要它的时候才会关闭它。注意,客户端鼓励缓存连接,而不是每次存取数据都重新打开。这是因为memcache被设计成在打开大量连接(有时是成百上
2012-12-11 18:11:08
846
翻译 Extending and Embedding PHP-扩展和移植PHP(五)
多线程模式的生命周期PHP越来越多被以多线程的方式应用于网站服务器中,作为SAPI的接口提供给IIS或者apache工作站。在多线程模式下,网站服务器在任何时候都只开启一个进程,但在这个进程空间里有多个线程同时在执行,这种方式减少一些性能消耗,包括避免重复调用MINIT和MSHUTDOWN方法,全局变量一次分配完资源并初始化,并且为大量请求间共享信息提供了途径。图1.4显示了在PHP中的一个平
2012-12-05 20:15:31
836
翻译 Extending and Embedding PHP-扩展和移植PHP(四)
多进程模式的生命周期这也是最常用的配置模式,在apache1或者apache2里都被经常使用,很多其它服务器也一样适合,本书后续部分都是与多进程模式相关。之所以被称为多进程模式,是因为当apache启动时,会马上创建一些子进程,每个子进程都有自己的进程空间和方法,并且彼此独立。一个子进程的PHP实例的生命周期如图1.2,唯一的变化是多个请求被放在了一对MINIT/MSHUTDOWN中间。
2012-12-05 20:13:50
959
翻译 Extending and Embedding PHP-扩展和移植PHP(三)
生命周期PHP实例,不管来自脚本的还是来自命令行,都包含前面介绍的一些事件,包括请求/模块初始化/关闭事件,以及脚本本身的执行。执行的次数和频率取决于具体的SAPI,四个常见的SAPI配置是包括CLI/CGI模式,多进程模式,多线程模式,嵌入式模式。CLI模式的生命周期CLI模式在单请求中是很特别的,这种模式下请求仍然是独立的的循环执行这些步骤。图1.1显示从命令行调用脚本test.p
2012-12-05 20:12:30
673
翻译 Extending and Embedding PHP-扩展和移植PHP(二)
一个RINIT方法如下:/* 在每个请求的开始处运行*/PHP_RINIT_FUNCTION(myextension){zval *myext_autoglobal;/* 初始化一个全局变量* 在MINIT 方法中声明一个空数组,和PHP中的* $_MYEXTENSION = array()等价;*/ALLOC_INIT_ZVAL(myext_autoglo
2012-12-04 21:02:04
741
翻译 Extending and Embedding PHP-扩展和移植PHP(一)
第一章 PHP生命周期在一个常见的WEB服务器环境里,你根本无法明确什么时候开启PHP解释器。只有在PHP脚本被请求的时候,你才会启动apache或者其它服务器,它们会载入PHP并运行。它们都以SAPI的方式开始命令行虽然看起来非常不同,但实际上以相同的方式运行。在系统提示符下输入的PHP命令,启动“命令行SAPI”,就像一个微形的网站服务器,服务于一个单一的请求。当脚本被执行完毕时,
2012-12-04 21:01:46
1751
原创 php中htmlentities原理
htmlentitieshtmlentities ( string string [, int quote_style [, string charset]]) 转换字符串为HTML字符编码1) string:需转义的原字符串2 )quote_style:Constant NameDescriptionENT_COMPATWill convert
2012-08-06 16:05:30
629
原创 win7下apache配置入门
1.1 打开文件Apache2\conf\httpd.conf文件,找到#Include conf/extra/httpd-vhosts.conf代码,去掉前面#1.2 打开conf/extra/httpd-vhosts.conf 文件,增加虚拟主机 ServerName abc.test.com DocumentRoot "C:/wamp/www2"
2012-08-04 14:52:45
416
原创 今天收获
1 Linux修改目录下所有子目录及文件写权限命令:chmod -R a+w *2 ZendStudio中建立Remote Server Support ,右键项目-〉Properties-〉Remote Server Support,配置服务器地址,账号信息和所在目录。 配置好后可在ZendStudio中直接提交到开发服务器:右键项目-〉Remote Servers-〉Upl
2012-08-04 14:52:11
307
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人