关注LAMP|PHP源代码分析|web架构|PHP扩展|Erlang|服务端架构
2009年08月10日Flex

0 Comments

本地Service browser中调试amfphp注意一则

注意关闭本地web服务器的keepalive功能,否则可能会出现刚刚修改的代码要隔断时间才能失效的问题。目前只在apache环境下发现这个问题。

PHP扩展之自定义全局变量

跟踪了一下PHP$_GET$_POST的产生过程,发现通过zend提供的函数和宏可以很方便注册自己的全局数组。相关的函数和宏:

END_API int zend_register_auto_global(

char *name, //全局数组名

uint name_len,  //数组名称长度- 1

zend_auto_global_callback auto_global_callback TSRMLS_DC //数组初始化回调函数

);

#define ZEND_SET_SYMBOL(symtable, name, var) \

{ \

char *_name = (name); \

\

ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name)+1, var, 1, 0); \

}

下面来注册我们的全局变量,假设我们的扩展名为test,我们在MINIT中进行注册操作。

zend_bool ming_global_callback(char *name, uint name_len TSRMLS_DC)

{

        zval *tmp;

        MAKE_STD_ZVAL(tmp);

        array_init(tmp);

        add_next_index_long(tmp,2222);

        ZEND_SET_SYMBOL(&EG(symbol_table), name, tmp);

}

PHP_MINIT_FUNCTION(test)

{

        /* If you have INI entries, uncomment these lines 

        REGISTER_INI_ENTRIES();

        */

        zend_register_auto_global("_MING"sizeof("_MING") - 1, ming_global_callback  TSRMLS_DC);

        return SUCCESS;

}

运行PHP代码 

<?php

var_dump($_MING);

结果:

array(1) {

  [0]=>

  int(2222)

}

xampp下 Pear安装出错Call to undefined method PEAR_Error::set()

简单的解决办法:删除PHP文件夹下的php.ini

返回顶部