一个很有潜力的PHP扩展开发框架

最近准备给新项目整合一个php的 dll扩展,今天在cu论坛很幸运发现一篇好帖:一个全新的c开发的PHP扩展框架,详细说明了扩展的开发过程
很有指导意义,下面转部分内容

Kiss - 用Php扩展实现的简单框架
代码简介:
  1. 我使用php v5.2.3,主要在64位的Ubuntu 7.10中开发,使用Apache 2.2.4,Php编译为Apache的模块;
  2. 同时在Windows XP Pro中使用VC6编译成功并测试可用;
  3. 由于不会用libtool,所以不知道如何将代码拆分到多个文件编译,请不要见笑我的代码管理方式^_^;
  4. 代码文件:
    • php_kiss.h - 模块头文件;
    • kiss.c - Php扩展相关代码;
    • kiss_inner.c - 实现基本功能,为kiss.c所#include;
    • kiss_const.c - 声明了太多的Php常量及相关macro,所以单放在此,为kiss.c所#include;

  • php_kiss.h:


    #ifndef PHP_KISS_H
    #define PHP_KISS_H


    extern zend_module_entry kiss_module_entry;
    #define phpext_kiss_ptr &kiss_module_entry

    /** ... */

    #ifdef ZTS
    #define KISS_G(v) TSRMG(kiss_globals_id, zend_kiss_globals *, v)
    extern int kiss_globals_id;
    #else
    #define KISS_G(v) (kiss_globals.v)
    extern zend_kiss_globals kiss_globals;
    #endif

    #ifdef ZTS
    #include "TSRM.h"
    #endif

    #define KISS_VERSION "0.1"
    #define PHP_EXT ".php"
    #define CLASS_EXT "Controller"
    #define ACTION_EXT "Action"
    #define DEFAULT_MODULE ""
    #define DEFAULT_CONTROLLER "index"
    #define DEFAULT_ACTION "index"
    /** ... */
    static PHP_FUNCTION(kiss_eval);

    static PHP_FUNCTION(kiss_status);
    static PHP_FUNCTION(kiss_set_rule);
    static PHP_FUNCTION(kiss_clear_rules);
    static PHP_FUNCTION(kiss_front_start);
    static PHP_FUNCTION(kiss_set_listener);
    static PHP_FUNCTION(kiss_forward);
    static PHP_FUNCTION(kiss_redirect);
    static PHP_FUNCTION(kiss_request_query);
    static PHP_FUNCTION(kiss_request_post);
    static PHP_FUNCTION(kiss_request_params);
    static PHP_FUNCTION(kiss_request_get);

    /** ... */

    ZEND_BEGIN_MODULE_GLOBALS(kiss)
        /** life cycle: module */
        char dir_sep;
        char * cfg_file;
        zend_bool cfg_inited;
        HashTable hosts_rw; // TODO: 以后使用持久存储或者系统分配内存,以使用全局数据。

        HashTable hosts_ls; // TODO: 以后使用持久存储或者系统分配内存,以使用全局数据。


        zend_class_entry * action_ce;

        zend_class_entry * listener_ce;
        /* life cycle: request */
        kiss_status * status;
        zval * obj_cache;
        zval * ls_called;
        zval * ls_pre_disp;
        zval * ls_post_disp;
        kiss_request * request; // TODO: 考虑模块启动时候申请内存

        // kiss_response * response; // TODO: 考虑模块启动时候申请内存

    ZEND_END_MODULE_GLOBALS(kiss)

    #endif    /* PHP_KISS_H */

引用通告地址: 点击获取引用地址
评论: 0 | 引用: 0 | 阅读: 2057
发表评论
昵 称: 密 码:
网 址: 邮 箱:
验证码: 验证码图片 选 项:
头 像:
内 容: