美文网首页
PHP的底层原理

PHP的底层原理

作者: 大也也 | 来源:发表于2019-03-26 10:34 被阅读0次

    PHP文件的执行过程

    先从一个简单的php文件开始,通过php文件的编译过程来引入php的底层

    <?php
      $phpCode = '<?php echo "The bottom of PHP";?>';
      $tokens = token_get_all($phpCode);
      foreach($tokens as $key => $val){
         $tokens[$key][0] = token_name($val[0]);
    
      }
      var_dump($tokens);
    

    执行结果如下:

    array(6) {
      [0]=>
      array(3) {
        [0]=>
        string(10) "T_OPEN_TAG"
        [1]=>
        string(6) "<?php "
        [2]=>
        int(1)
      }
      [1]=>
      array(3) {
        [0]=>
        string(6) "T_ECHO"
        [1]=>
        string(4) "echo"
        [2]=>
        int(1)
      }
      [2]=>
      array(3) {
        [0]=>
        string(12) "T_WHITESPACE"
        [1]=>
        string(1) " "
        [2]=>
        int(1)
      }
      [3]=>
      array(3) {
        [0]=>
        string(26) "T_CONSTANT_ENCAPSED_STRING"
        [1]=>
        string(19) ""The bottom of PHP""
        [2]=>
        int(1)
      }
      [4]=>
      string(1) ";"
      [5]=>
      array(3) {
        [0]=>
        string(11) "T_CLOSE_TAG"
        [1]=>
        string(2) "?>"
        [2]=>
        int(1)
      }
    }
    
    

    编译程序是将高级语言变成计算机可识别的二进制语言。主要分为五个过程
    词法分析->语法分析->语义检查和中间代码生成->代码优化->目标代码生成
    对应的PHP的过程如下

    image.png

    opcode的数据结构如下

    struct _zend_op {
        opcode_handler_t handler; //执行时调用的处理函数
        znode_op op1; //操作数1
        znode_op op2; //操作数2
        znode_op result; //结果
        ulong extended_value; //额外的信息
        uint lineno; //源码中的行数
        zend_uchar opcode; //opcode代码
        zend_uchar op1_type; //操作数1类型
        zend_uchar op2_type; //操作数1类型
        zend_uchar result_type; //结果类型
    };
    

    PHP四层体系

    image.png
    zend 引擎

    C写的。用来实现上面的PHP语言编译

    Extensions

    围绕zend引擎,实现各种拓展

    Sapi

    apache2handler:这是以apache作为webserver,采用mod_PHP模式运行时候的处理方式,也是现在应用最广泛的一种。
    cgi:这是webserver和PHP直接的另一种交互方式,也就是大名鼎鼎的fastcgi协议,在最近今年fastcgi+PHP得到越来越多的应用,也是异步webserver所唯一支持的方式。
    cli:命令行调用的应用模式

    相关文章

      网友评论

          本文标题:PHP的底层原理

          本文链接:https://www.haomeiwen.com/subject/lkfivqtx.html