Php13. <?php $a = 123; $b = “123”; $c = array( 5=>”a”, “ a”=>10 ); ?> zval *a; MAKE_STD_ZVAL(a); ZVAL_LONG(a, 123); ZEND_SET_SYMBOL(EG(active_symbol_table), " a " , a); zval *b; MAKE_STD_ZVAL(b); ZVAL_STRING(b, “ 123 ” , 1); // 参数 1 指定自动分配空间 ZEND_SET_SYMBOL(EG(active_symbol_table), " b " , b); zval *c; MAKE_STD_ZVAL(c); array_init(c); add_index_string(c, 5, "a", 1); add_assoc_long(c, "a", 10); ZEND_SET_SYMBOL(EG(active_symbol_table), “ c " , c); 14. function hello($a, $b = “world”) { echo $a . $b; } PHP_FUNCTION(hello) { char *a, *b = “world”; int a_len, b_len = sizeof(“world”) – 1; if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &a, &a_len, &b, &b_len)) { PHPWRITE(a, a_len); PHPWRITE(b, b_len); } } 所有 | 以后的都为可选参数 15. zend_parse_parameters() 参数类型 变量类型 a 数组 (array) b 布尔值 (boolean) d 浮点数值 (floating point) l 整形 (integer) o 实例对像 (object instance) O 指定类型的对像 (object instance of a specified type) r 资源类型 (resource) s 字串 (string) z 任意类型 (non-specific zval) Z 地址传递 (dereferenced non-specific zval) 16. function my_func($a, $b) { return $a + $b; } PHP_FUNCTION(my_func) { zval *a, *b; if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &a, &b)) { convert_to_long(a); convert_to_long(b); return_value ->type = IS_LONG; return_value ->value.lval = a->value.lval + b->value.lval; return; } } 类型转换 23. 查询是一个正常的域名或 IP 地址 ? 从域名后缀提取主域名服务器地址 详细信息在别的域名信息服务器上 调用 Socket 进域名信息服务器通讯 24. 查询是一个正常的域名或 IP 地址 ? 从域名后缀提取主域名服务器地址 详细信息在别的域名信息服务器上 调用 Socket 进域名信息服务器通讯 Userland 接口 25. Socket 工作模式: 阻塞模式 | 非阻塞模式 | I/O 多路复用 | 信号驱动 I/O | 异步 I/O ( 避免堵塞 ) 28. 目标: 在 Apache 扩展为依托记录指定文件的点击次数 关键词: IPC Shared memory 内存消耗: 每个 文件被 Hash 后只有 4 个字节 ( i386 ), 假定 10000 个文件 10000 * 4 / 1024 = 39.1 Kbytes 性能消耗: 通常在 PHP 等脚本中写 DB / 文件 / Memcache 来记录点击次数 它的性能和 Apache 的 access_log 相比还是有差距的,而 Apache 写日志要对文件进行操作,与读写内存操作的 Apache 模块来说性 价比又是一个差距。 注: APR 是 Apache portable runtime 的简写 30. 模块编写: 1. 注册一个 Apache module, 类型为所有 module 完成 后再调用此 module( APR_HOOK_LAST ) 2. 对每个访问的 URI 进行过虑 , 符合指定记录类型的文件 就进行统计 ( 类型由 httpd.conf 中设定 ) 3. 统计开始时挂载共享内存 , 第一次挂载 的时候共享内存 不存在 , 需要向 Apache 申请共享内存 空间 . 4. 循环共享内存中的数据 , 如果 请求 URI 的 key 和共享内存 中已保存的某条记录相匹配 , 则将该 key 的计数器累加 5. 从当前进程空间中卸载挂进来的共享内存空间 6. 模块返回“不做任何处理”的代码 (return DECLINED ) 34. 相关 文件放在 http://code.google.com/p/php-whois Hinweis der Redaktion [email_address] [email_address] AddHandler staturl .php .html .xyz [email_address]