关闭

如何理解“php是用c写的”

标签: php
1421人阅读 评论(0) 收藏 举报
分类:

很多人知道,php是用c写的。那么到底c写了php的什么呢?要理解这个,我们先从一个php脚本如何执行说起。

假设有个php文件helloWorld.php:

<?php
$str = "hello world!";
echo $str;

然后我们在命令行执行:php helloWorld.php。之后会发生什么呢?
①、机器会打开一个叫php的程序,这个程序是用c写的。
②、php程序会去读取helloWorld.php里面的内容,然后对其内容进行词法分析将内容(也就是php代码)切分成一个个的token,比如上面的代码会得到如下的token集:

array (
     0 => array (
          0 => 368,
          1 => '<?php',
          2 => 1,
     ),
     1 => array (
          0 => 371,
          1 => '',
          2 => 2,
     ),
     2 => '=',
     3 => array (
          0 => 371,
          1 => '',
          2 => 2,
     ),
     4 => array (
          0 => 315,
          1 => '"hello world!"',
          2 => 2,
     ),
     5 => ';',
     6 => array (
          0 => 371,
          1 => '',
          2 => 3,
     ),
     7 => array (
          0 => 316,
          1 => 'echo',
          2 => 4,
     ),
     8 => array (
          0 => 371,
          1 => '',
          2 => 4,
     ),
     9 => ';'
)

③、php程序对这些token集进行语法分析,如果没有错误就将其编译成一条条的opcode,这些opcode的结构如下:

struct _zend_op {
     opcode_handler_t handler; //读到这条opcode时,会执行这个函数,这个函数是根据opcode指令码与处理函数映射关系获得的
     znode result;
     znode op1;
     znode op2;
     ulong extended_value;
     uint lineno;
     zend_uchar opcode;//opcode指令码
};

④、php的zend引擎一条一条的读取opcode,根据opcode获取函数名,然后zend引擎执行其内部相应的函数。

到这里,我们大致明白:我们写的php代码,会被转化为一堆指令集,然后php程序根据这些指令集,执行其内部相应的函数,最终得到我们想要的结果。所以,“php是由c写的”这句话可以这样理解:用c语言编写了一个程序,这个程序我们把他叫做zend。运行这个程序,并向这个程序传入一个后缀为php的文件名,这个程序读取文件中的内容,然后把内容转化为一系列的指令,并根据这些指令,运行zend内部相应的函数。

0
0
查看评论

用C编写你自己的php扩展

本文参考:http://blog.csdn.net/taft/article/details/596291 如果你没写过php扩展,又是追求性能的极客,那么这篇文章肯定适合你: 假如你有这样一个php程序 function self_concat($string, $n){ $result...
  • ddjohn
  • ddjohn
  • 2015-01-01 11:47
  • 2107

php调用C代码详解

在php程序中需要用到C代码,应该是下面两种情况: 1 已有C代码,在php程序中想直接用 2 由于php的性能问题,需要用C来实现部分功能 针对第一种情况,最合适的方法是用system调用,把现有C代码写成一个独立的程序。参数通过命令行或者标准输入传入,结果从标准输出读出。其次,...
  • michael493439861
  • michael493439861
  • 2012-10-18 09:02
  • 803

C与PHP速度对比

一直就知道PHP是C写的,网上大部分实际应用消耗性能的模块就是由PHP的拓展C来重写的,网上曾经看过百度的一篇大话PHP性能 ,对此文看法很是赞同的。 很早就相对PHP和C进行一个亲测的对比了,无奈当时对于Zend API不了解,现在本文就是亲自来测试一下C与PHP的差距。 我...
  • zyf837368104
  • zyf837368104
  • 2013-03-17 13:32
  • 7880

如何理解“php是用c写的”

很多人知道,php是用c写的。那么到底c写了php的什么呢?要理解这个,我们先从一个php脚本如何执行说起。假设有个php文件helloWorld.php:<?php $str = "hello world!"; echo $str;然后我们在命令行执行:php hello...
  • blakeFez
  • blakeFez
  • 2015-07-08 12:31
  • 1421

编写PHP语言C源码

  • 2009-02-28 20:24
  • 9.73MB
  • 下载

用C语言写PHP扩展

1:预定义 在home目录,也可以其他任意目录,写一个文件,例如caleng_module.def 内容是你希望定义的函数名以及参数: int a(int x,int y) string b(string str,int n)   2:到php源码目录的ext目录 ...
  • sanbingyutuoniao123
  • sanbingyutuoniao123
  • 2016-07-15 22:38
  • 1023

实战:用C写php扩展(一)

<br />1、  前言<br />首先,确保你的机器安装了apache和php。假设apache的安装目录为/usr/local/apache2,php的安装目录为/usr/local/php<br /> <br />此外你还需要...
  • sunlylorn
  • sunlylorn
  • 2011-03-06 14:28
  • 4581

在Windows下写PHP的C扩展

//原文地址:http://koda.iteye.com/blog/315779 安装好如下软件:  引用 1. VC++ 6  2. php二进制环境  3. Cygwin.  I. 下载php的源码包  下载...
  • lltaoyy
  • lltaoyy
  • 2017-05-02 21:24
  • 238

php调用c语言编写的so动态库

from http://blog.csdn.net/wzhwho/article/details/6949297 PHP除了使用扩展库的方式调用c函数,还可以通过socket通信的方式。这里介绍前者。  第一步: 环境搭建 1. 先看本机是否已经安装了较低版本的...
  • feisy
  • feisy
  • 2014-01-06 20:41
  • 8401

判断一个网站是不是用php写的

http://baidu.com/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 http://baidu.com/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 http://baidu.com/?=PHPE9568F35-D...
  • xuyaokun123
  • xuyaokun123
  • 2016-07-03 18:31
  • 1048
    个人资料
    • 访问:53393次
    • 积分:855
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:5篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论