zoukankan      html  css  js  c++  java
  • 《PHP扩展及核心》

    本文地址:http://www.cnblogs.com/aiweixiao/p/8202365.html

    原文地址

    欢迎关注微信公众号  程序员的文娱情怀

    一、主要内容:

    1️⃣php扩展的概念和底层实现

    2️⃣编写一个php扩展的步骤

    3️⃣php底层,Zend 引擎API的介绍 ,HashTable 原理

    二、相关概念

        1.【php扩展】


    php的插件,也就是php的扩展,因为php的底层就是C语言。

    php –m 或者 php –i 都可以查看扩展。

    其实,xhproh, curl都是php的扩展。

     
    php的扩展图phpinfo()
     

    2.【为什么要有扩展?】


    1)【效率高】复杂的图像算法,需要写成PHP扩展

    2)【操作底层,未支持的技术】1)PHP需要支持一项她还未支持的技术。这通常包括包裹一些现成的C函数库,以便提供PHP接口。 2)有些系统调用不能用PHP直接访问,需要编写成扩展,比如使用Linux下的fork()函数创建一个进程。

    3)【商业化,保护源码】想商业话一个应用,但是又不想暴露源代码,就可以编写成扩展。

    3.【PHP核心组成?】


    Zend引擎:1)核心、基础设施 2)PHP语法实现 3)脚本编译执行 4)扩展机制 5)内存管理

    SAPI:服务器抽象层, 上层调用它

     
    php核心构成图
     

    二、走向开发(编写扩展)

     
    总体步骤
     

    ①下载PHP源码


    要开发PHP扩展,第一步要下载PHP源代码,因为里面有开发扩展需要的工具。

    下载地址: wget http://cn2.php.net/get/php-5.5.38.tar.gz/from/this/mirror

    ②生成扩展组件框架 


    ext_skel 命令

    ./ext_skel --extname=myext  会生成扩展基础文件夹及文件 php-5.5.38/ext/myext/

    ③修改配置文件


    修改config.m4文件,去掉配置前的dnl

    config.m4:  这是Unix环境下的Build System配置文件,后面将会通过它生成配置和安装。

     
    修改配置config.m4

    ④编写核心函数(可用默认的)


    步骤如下(myext.c):

    1、使用宏PHP_FE将函数加入到myext_functions中

    2、使用宏PHP_FUNCTION定义函数体

     
    扩展c文件myext.c

    ⑤编译扩展+重启


    1、调用phpize程序生成编译配置文件 cd myext && phpize

    2、编译扩展库  ./configure --with-php-config=/Data/apps/php/bin/php-config

    3、make         

    4、make  test

    5、sudo make  install                                                生成myext.so 文件    

    6、 sudo vim /Data/apps/php/lib/php.ini  加上 extension=myext.so

    7、 sudo /Data/apps/php/sbin/php-fpm reload

     
    修改php配置文件,添加扩展

    三、了解原理

     
    php的生命周期
     
    php的变量在内核--写时复制
     
    php的变量在内核--底层代码对比                                           
     
    php的变量在内核--结构体表示                                           
     
    HashTable分析--结构体
     
    HashTable分析--绘图表示
     
    Zend引擎API

    四、写在最后

        php的核心是C语言,核心引擎是Zend,了解HashTable就能了解php的精髓。php的扩展开发说到底是C语言的编写,更见底层功力,希望大家都能成为技术大牛。

        最后,预祝大家2018年万事如意,心想事成!

  • 相关阅读:
    exp 和imp 与expdp / impdp 区别
    nginx优化
    nginx root alias proxypass
    mysql3
    logrotate 用法
    SQL执行顺序
    http与RPC的关系
    docker
    windows 时间同步
    Java生成指定长度的随机字符串
  • 原文地址:https://www.cnblogs.com/aiweixiao/p/8202365.html
Copyright © 2011-2022 走看看