PHP底层原理分析和底层扩展编写

本文深入解析了PHP底层原理及扩展编写技巧,通过实例演示了如何查看PHP函数如curl_exec的底层实现,并介绍了如何将自定义扩展集成到PHP环境中。

PHP底层原理分析和底层扩展编写

运行原理  http://www.phpchina.com/article-40203-1.html

PHP底层开发 可以理解为就是C的开发,那么简单地说如果我们要查看某个PHP函数的底层实现怎么看呢?

需要PHP源码包:http://www.php.net/downloads.php

主要目录是Zend 和ext(写扩展的目录)
举个栗子,如果需要查看curl_exec(),如何查看。
我们知道curl_exec 是CURl扩展中的函数,那么源码目录大概是src/ext/crul/
然后我们发现 interface.c 下实现了 这个PHP方法:
部分源码如下:

PHP_FUNCTION(curl_exec)
{
    CURLcode    error;
    zval        *zid;
    php_curl    *ch;

    if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &zid) == FAILURE) {
        return;
    }

    if ((ch = (php_curl*)zend_fetch_resource(Z_RES_P(zid), le_curl_name, le_curl)) == NULL) {
        RETURN_FALSE;
    }

    _php_curl_verify_handlers(ch, 1);

    _php_curl_cleanup_handle(ch);

    error = curl_easy_perform(ch->cp);
    SAVE_CURL_ERROR(ch, error);
   
    if (error != CURLE_OK && error != CURLE_PARTIAL_FILE) {
        smart_str_free(&ch->handlers->write->buf);
        RETURN_FALSE;
    }

    if (!Z_ISUNDEF(ch->handlers->std_err)) {
        php_stream  *stream;
        stream = (php_stream*)zend_fetch_resource2_ex(&ch->handlers->std_err, NULL, php_file_le_stream(), php_file_le_pstream());
        if (stream) {
            php_stream_flush(stream);
        }
    }

    if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.s) {
        smart_str_0(&ch->handlers->write->buf);
        RETURN_STR_COPY(ch->handlers->write->buf.s);
    }

   
    if (ch->handlers->write->method == PHP_CURL_FILE && ch->handlers->write->fp) {
        fflush(ch->handlers->write->fp);
    }
    if (ch->handlers->write_header->method == PHP_CURL_FILE && ch->handlers->write_header->fp) {
        fflush(ch->handlers->write_header->fp);
    }

    if (ch->handlers->write->method == PHP_CURL_RETURN) {
        RETURN_EMPTY_STRING();
    } else {
        RETURN_TRUE;
    }
}

这就是底层源码 了,但是我疑问的是 如果开发完扩展如何加入PHP包中生效,毕竟查看PHP Module包的时候只发现了一堆.dll文件,而且是非可读的码?呵呵,那是因为那是C被编译之后的文件。

那么来看一组干货:
windows下开发PHP扩展dll
http://www.360doc.com/content/14/0509/16/12091178_376141791.shtml PHP底层原理分析和底层扩展编写

http://blog.youkuaiyun.com/evkj2013/article/details/52346792

这下就全部清晰了。

posted @ 2016-10-21 16:29 Newman·Li 阅读( ...) 评论( ...) 编辑 收藏
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值