• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP 底层实现

php 搞代码 4年前 (2022-01-23) 14次浏览 已收录 0个评论

?

2、 请在local环境,编译PHP,要求:版本5.4, 5.5, 5.6,每个版本要涵盖3个编译版本,包括nts \ zts \ debug

/usr/lib/apache2/modules

/etc/apache2/mods-enabled/

vim php5.load

.编译php的ztf,ntf,debug模式

a.安装apsx工具 apt-get install apache-dev

b.在php源码包下运行 ./configure –prefix=/home/merlin/make_php_version/php-5.4-zts-debug/ –enable-maintainer-zts –with-apxs2=/usr/bin/apxs2 –enable-debug

c.make&&make install 在/usrb/apache2/modules下生成libphp5.so文件

d.在/etc/apache2/mods-enabled下php5.load中添加模块文件.so

编译报错 解决 undefined reference to `libiconv_open’

配置文件:

在安装包中找到php.ini.development 拷贝到安装后的目录下的lib里

每次执行该版本的php 要指定目录

例如:/home/merlin/php_version/php-5.5.21-zts-debug/bin/php -i|grep php.ini

解决方法:
#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
#tar -zxvf libiconv-1.13.1.tar.gz
#cd libiconv-1.13.1
# ./configure –prefix=/usr/local/libiconv
# make
# make install

再检查php,指定 iconv的位置 –with-iconv=/usr/local/libiconv

3、 编写一个简单的PHP扩展,实现3个PHP方法,分别接收参数,并完成结果输出:

a. 数字a与数字b的,加、减、乘、除

b. 字符串a,在字符串b中的重复次数

c. 数组a与数组b的交集与差集

参考 http://www.laruence.com/2009/04/28/719.html

源码包执行

  1. ./ext_skel –extname=myfunctions –proto=myfunctions.def

make clean && make && make install

/etc/php5 操作ini 以及移动so文件

类型指定符 对应的C类型 描述
l long 符号整数
d double 浮点数
s char *, int 二进制字符串,长度
b zend_bool 逻辑型(1或0)
r zval * 资源(文件指针,数据库连接等)
a zval * 联合数组
o zval * 任何类型的对象
O zval * 指定类型的对象。需要提供目标对象的类类型
z zval * 无任何操作的zval

if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, “sdd”,&str,&str_len,&a,&b) == FAILURE){

return;

}

设置返回值并且结束函数 设置返回值 宏返回类型和参数
RETURN_LONG(l) RETVAL_LONG(l) 整数
RETURN_BOOL(b) RETVAL_BOOL(b) 布尔数(1或0)
RETURN_NULL() RETVAL_NULL() NULL
RETURN_DOUBLE(d) RETVAL_DOUBLE(d) 浮点数
RETURN_STRING(s,

本文来*源gaodai^.ma#com搞#代!码网
搞gaodaima代码

dup)

RETVAL_STRING(s, dup) 字符串。如果dup为1,引擎会调用estrdup()重复s,使用拷贝。如果dup为0,就使用s
RETURN_STRINGL(s, l, dup) RETVAL_STRINGL(s, l, dup) 长度为l的字符串值。与上一个宏一样,但因为s的长度被指定,所以速度更快。
RETURN_TRUE RETVAL_TRUE 返回布尔值true。注意到这个宏没有括号。
RETURN_FALSE RETVAL_FALSE 返回布尔值false。注意到这个宏没有括号。
RETURN_RESOURCE(r) RETVAL_RESOURCE(r) 资源句柄。

php -i | grep php.ini

1、 请具体叙述PHP的运行机制(细到多深看你心情, 呵);

PHP从下到上是一个4层体系:

  • Zend引擎:Zend整体用纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。
  • Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的PHP中间层、富文本解析就是extension的典型应用)。
  • Sapi:Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
  • 上层应用:这就是我们平时编写的PHP程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。


    搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
    转载请注明原文链接:PHP 底层实现

    喜欢 (0)
    [搞代码]
    分享 (0)
    发表我的评论
    取消评论

    表情 贴图 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址