数码资讯
PHP扩展开发入门教程
PHP扩展开发 我将总结我在这一系列博客中对PHP扩展开发的学习和理解,试图简单而清晰地描述在Linux系统下开发PHP扩展的最基本知识。 死的工作 首先,拿到一份PHP源代码(你可以登录从GitHub上,或在官方网站下载最新的稳定版),然后编译它。为了加快编译速度,我们建议扩展禁用所有其他(使用-
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
PHP扩展开发
我将总结我在这一系列博客中对PHP扩展开发的学习和理解,试图简单而清晰地描述在Linux系统下开发PHP扩展的最基本知识。
死的工作
首先,拿到一份PHP源代码(你可以登录从GitHub上,或在官方网站下载最新的稳定版),然后编译它。为了加快编译速度,我们建议扩展禁用所有其他(使用--禁用所有选项),但它是最好的打开调试(使用--启用调试选项)和线程安全(使用,使维护人员,但是ZTS)关闭调试时释放的膨胀,视情况选择是否需要打开一个线程安全的:
复制代码代码如下所示:
美元/ buildconf力。
美元。 /配置禁用--启用调试,使保持特稿
为使
注意,我们没有指定前缀选项(也没有make安装),因为没有必要。注意输出信息,也许您需要安装一些依赖项才能成功编译PHP。
编译PHP可执行程序在不同的宿主环境的不同子目录的源代码目录下的SAPI。稍后我们将主要使用CLI(命令行接口)环境,我们可以创建一个别名以方便引用。
复制代码代码如下所示:
$别名PHP开发= / usr /局部/ src / / / CLI SAPI php-5.6.5 / PHP
有一些命令行选项是有用的:
复制代码代码如下所示:
PHP开发H #打印帮助信息
PHP开发- V #打印版本信息
PHP开发,INI #打印配置信息
PHP开发M #打印信息模块加载
PHP开发-我# phpinfo
PHP开发# R代码执行代码
扩展的骨架
所有的PHP官方的扩展是在源代码的外部目录,和我们自己的延伸,也可以放在这个目录中,发现有一个shell脚本在这个目录下的ext_skel,用于生成PHP扩展的骨架。使用这个脚本,我们可以快速创建PHP扩展。
复制代码代码如下所示:
美元/ ext_skel -- extname = myext
上面的命令帮助我们创建一个扩展名为myext,在myext目录的源代码,脚本可以打印帮助信息没有任何参数,所以你可以看到更多的选项提供的脚本。
然后让我们完成我们的扩展。进入myext目录,编辑config.m4配置文件,找到php_arg_enable宏功能,删除以前的DNL注释(共三株),返回到源目录和执行buildconf,配置和命令:
复制代码代码如下所示:
美元/ buildconf力。
美元。 /帮助myext | grep
——使myext使myext支持
美元。 /配置--禁用所有--使myext --启用调试,使保持特稿
为使
注意我们使用。 /帮助的grep myext |打印负荷我们扩展,如果你没有看到下面的输出,那么我们的扩展配置不成功,请回来的config.m4文件下。
编译应该是非常快的,因为大部分的代码已经compiled.php有另一种方式编译和扩展(使用动态连接方式扩展文件等)。但是,我们建议在开发扩展时进行静态编译,因为它节省了在配置文件中加载和扩展的步骤。
如果一切顺利,我们可以进行第一次扩建。
复制代码代码如下所示:
PHP开发myext美元M grep |
myext
PHP开发r'echo美元confirm_myext_compiled(myext )。
祝贺你!您已成功修改分机 / / config.m4 myext。myext现在编译成模块
第一个命令显示我们的扩展已加载。第二命令执行自动为我们创造的ext_skel延伸骨架的功能。当然,这个功能是没有意义的,但是我们可以很容易地适应这个功能你好世界。
手动创建扩展
大部分的教程描述扩展开发的ext_skel延伸骨架,这当然是方便快捷,但我个人更喜欢纯手工开发的扩展,因为它是更容易理解它的每一个细节。
手动创建扩展,推进到ext目录,并创建扩展目录myext2。几个文件是必要的:config.m4,myext2。C,和php_myext2。H.
首先,让我们写配置文件config.m4:
复制代码代码如下所示:
php_arg_enable(myext2,是否启用myext2支持,
{——enable-myext2使myext2支持})
如果测试php_myext2 !=否;然后
php_new_extension(myext2,myext2。C,ext_shared美元)
FI
config.m4实际上是一个由autoconf程序使用的配置文件,和autoconf的autotools的工具箱的一个重要组成部分,它需要很长的时间来充分描述的autoconf使用,但它是非常简单的使用在这里。
php_arg_enable是由PHP进行定义的宏功能。myext2是它的第一个参数。它指出了扩展名。后两个参数只显示当使配置的执行,所以我们可以随意写。{ }在autoconf的句法功能类似于双引号,这是用来把字符串。(注意第二个参数包含空格,但它可以不用括号)。第四个参数用来表示扩展默认是打开还是关闭(是或否),默认值是no。
以下三行实际上是shell的语法,来决定我们是否有打开php_myext2扩展模块。如果扩展模块(-- enable-myext2)打开,php_myext2美元中的变量的值是不是没有,所以php_new_extension宏执行。这个宏功能也是一个扩展语法的PHP进行定义。第一个参数也是扩展名。第二个参数是扩展C的文件进行编译,如果有多个,它可以被写下来的顺序(间隔);第三个参数是ext_shared美元。
接下来,写php_myext2。h头文件,并命名为PHP扩展的规范php_延伸。H:
复制代码代码如下所示:
#则php_myext2_h
#定义php_myext2_h
外部zend_module_entry myext2_module_entry;
#定义phpext_myext2_ptr myext2_module_entry
#定义php_myext2_version0.1.0
原型
php_function(你好);
如果# php_myext2_h / * * /
这里主要的代码是一个宏phpext_myext2_ptr的定义,它是指我们扩展PHP的底部,你可以看到,该宏的名称也是一个标准的phpext_延伸,_ptr.and myext2_module_entry是结构,我们将定义在C文件,其命名也标准的扩展_module_entry。
此外,我们定义了一个宏和函数原型,确定我们的扩展版本号(通过php_function宏的php_function宏函数的参数是函数名,可以用于外部),稍后我们将实现这一功能。
最后,要在对myext2实施看看。C文件。
复制代码代码如下所示:
#包括PHP。H
#包括php_myext2。H
/ * myext2_functions { }
*
*每个用户可见的功能必须在myext2_functions {入口}。
* /
静态常量zend_function_entry myext2_functions { } = { {
php_fe(你好,null)
php_fe_end
};
/ * myext2_module_entry
* /
zend_module_entry myext2_module_entry = { {
standard_module_header,
myext2
myext2_functions,模块功能 / * * /
NULL,模块初始化
NULL,模块关闭
NULL,请求初始化
NULL,请求关机
空,phpinfo / * * /
php_myext2_version,模块版本 / * * /
standard_module_properties
};
# ifdef compile_dl_myext2
zend_get_module(myext2)
# endif
原始空白(hello)
打印你好世界!。
php_function(你好)
{
php_printf(你好世界!;
}
通过比较由扩展骨架创建的C文件,我们会发现我们的C文件非常简单,基本扩展就足够了。
上面的代码简单明了,大部分注释已经说明了问题:
1。第一个包含要使用的头文件。PHP。H是必要的,它帮助我们包括标准库文件的绝大部分我们都会使用,如stdio. h,h,等程序。
2.myext2_functions定义了函数,我们想暴露结构的数组,每个元素是由php_fe宏观规定,php_fe宏有两个参数,第一个是函数名,可以用于外部,二是参数信息(在这里我们简单地使用null),和最后一个元素必须是php_fe_end.note附注并再次强调每一功能被暴露在外的使用必须在结构数组的定义。
3.myext2_module_entry界定了我们的模块的信息,这是一个结构,和大部分的属性已被注释说明。注意在中间的五个函数指针,我们都简单地设置为null,我们会告诉他们如何在后续的博客。
的4.zend_get_module(myext2)宏功能是通过ifdef宏包含的,所以它是确定是否是它是否被调用。在什么情况下会被调用,什么情况下不会叫,在后续的博客会告诉。
5,我们实现了hello函数的最后几行代码。这很简单。打电话php_printf输出Hello World是完全一样的换行符,php_printf和printf。
6中的注释。而且,为了便于折叠编辑器的使用,我们建议你写这个笔记。
它涉及一些宏,如php_fe,php_fe_end,php_function等等。在随后的博客中完整地介绍这些宏是唯一的方法。最简单的方法是现在记住这些宏。
请注意,我们每个文件的名称、变量的名称、空格和缩进,以及注释都非常规范,遵循这些规范,这样我们就可以编写代码,而PHP代码本身更适合,我们建议您开发使用这种标准的PHP扩展。
最后,编译并运行我们的扩展:
复制代码代码如下所示:
美元/ buildconf力。
美元。 /帮助的grep myext2 |
——enable-myext2使myext2支持
美元。 /配置--禁用所有-- enable-myext2 --启用调试,使保持特稿
为使
PHP开发M美元grep myext2 |
myext2
PHP开发r'hello美元();
你好世界!
我将总结我在这一系列博客中对PHP扩展开发的学习和理解,试图简单而清晰地描述在Linux系统下开发PHP扩展的最基本知识。
死的工作
首先,拿到一份PHP源代码(你可以登录从GitHub上,或在官方网站下载最新的稳定版),然后编译它。为了加快编译速度,我们建议扩展禁用所有其他(使用--禁用所有选项),但它是最好的打开调试(使用--启用调试选项)和线程安全(使用,使维护人员,但是ZTS)关闭调试时释放的膨胀,视情况选择是否需要打开一个线程安全的:
复制代码代码如下所示:
美元/ buildconf力。
美元。 /配置禁用--启用调试,使保持特稿
为使
注意,我们没有指定前缀选项(也没有make安装),因为没有必要。注意输出信息,也许您需要安装一些依赖项才能成功编译PHP。
编译PHP可执行程序在不同的宿主环境的不同子目录的源代码目录下的SAPI。稍后我们将主要使用CLI(命令行接口)环境,我们可以创建一个别名以方便引用。
复制代码代码如下所示:
$别名PHP开发= / usr /局部/ src / / / CLI SAPI php-5.6.5 / PHP
有一些命令行选项是有用的:
复制代码代码如下所示:
PHP开发H #打印帮助信息
PHP开发- V #打印版本信息
PHP开发,INI #打印配置信息
PHP开发M #打印信息模块加载
PHP开发-我# phpinfo
PHP开发# R代码执行代码
扩展的骨架
所有的PHP官方的扩展是在源代码的外部目录,和我们自己的延伸,也可以放在这个目录中,发现有一个shell脚本在这个目录下的ext_skel,用于生成PHP扩展的骨架。使用这个脚本,我们可以快速创建PHP扩展。
复制代码代码如下所示:
美元/ ext_skel -- extname = myext
上面的命令帮助我们创建一个扩展名为myext,在myext目录的源代码,脚本可以打印帮助信息没有任何参数,所以你可以看到更多的选项提供的脚本。
然后让我们完成我们的扩展。进入myext目录,编辑config.m4配置文件,找到php_arg_enable宏功能,删除以前的DNL注释(共三株),返回到源目录和执行buildconf,配置和命令:
复制代码代码如下所示:
美元/ buildconf力。
美元。 /帮助myext | grep
——使myext使myext支持
美元。 /配置--禁用所有--使myext --启用调试,使保持特稿
为使
注意我们使用。 /帮助的grep myext |打印负荷我们扩展,如果你没有看到下面的输出,那么我们的扩展配置不成功,请回来的config.m4文件下。
编译应该是非常快的,因为大部分的代码已经compiled.php有另一种方式编译和扩展(使用动态连接方式扩展文件等)。但是,我们建议在开发扩展时进行静态编译,因为它节省了在配置文件中加载和扩展的步骤。
如果一切顺利,我们可以进行第一次扩建。
复制代码代码如下所示:
PHP开发myext美元M grep |
myext
PHP开发r'echo美元confirm_myext_compiled(myext )。
祝贺你!您已成功修改分机 / / config.m4 myext。myext现在编译成模块
第一个命令显示我们的扩展已加载。第二命令执行自动为我们创造的ext_skel延伸骨架的功能。当然,这个功能是没有意义的,但是我们可以很容易地适应这个功能你好世界。
手动创建扩展
大部分的教程描述扩展开发的ext_skel延伸骨架,这当然是方便快捷,但我个人更喜欢纯手工开发的扩展,因为它是更容易理解它的每一个细节。
手动创建扩展,推进到ext目录,并创建扩展目录myext2。几个文件是必要的:config.m4,myext2。C,和php_myext2。H.
首先,让我们写配置文件config.m4:
复制代码代码如下所示:
php_arg_enable(myext2,是否启用myext2支持,
{——enable-myext2使myext2支持})
如果测试php_myext2 !=否;然后
php_new_extension(myext2,myext2。C,ext_shared美元)
FI
config.m4实际上是一个由autoconf程序使用的配置文件,和autoconf的autotools的工具箱的一个重要组成部分,它需要很长的时间来充分描述的autoconf使用,但它是非常简单的使用在这里。
php_arg_enable是由PHP进行定义的宏功能。myext2是它的第一个参数。它指出了扩展名。后两个参数只显示当使配置的执行,所以我们可以随意写。{ }在autoconf的句法功能类似于双引号,这是用来把字符串。(注意第二个参数包含空格,但它可以不用括号)。第四个参数用来表示扩展默认是打开还是关闭(是或否),默认值是no。
以下三行实际上是shell的语法,来决定我们是否有打开php_myext2扩展模块。如果扩展模块(-- enable-myext2)打开,php_myext2美元中的变量的值是不是没有,所以php_new_extension宏执行。这个宏功能也是一个扩展语法的PHP进行定义。第一个参数也是扩展名。第二个参数是扩展C的文件进行编译,如果有多个,它可以被写下来的顺序(间隔);第三个参数是ext_shared美元。
接下来,写php_myext2。h头文件,并命名为PHP扩展的规范php_延伸。H:
复制代码代码如下所示:
#则php_myext2_h
#定义php_myext2_h
外部zend_module_entry myext2_module_entry;
#定义phpext_myext2_ptr myext2_module_entry
#定义php_myext2_version0.1.0
原型
php_function(你好);
如果# php_myext2_h / * * /
这里主要的代码是一个宏phpext_myext2_ptr的定义,它是指我们扩展PHP的底部,你可以看到,该宏的名称也是一个标准的phpext_延伸,_ptr.and myext2_module_entry是结构,我们将定义在C文件,其命名也标准的扩展_module_entry。
此外,我们定义了一个宏和函数原型,确定我们的扩展版本号(通过php_function宏的php_function宏函数的参数是函数名,可以用于外部),稍后我们将实现这一功能。
最后,要在对myext2实施看看。C文件。
复制代码代码如下所示:
#包括PHP。H
#包括php_myext2。H
/ * myext2_functions { }
*
*每个用户可见的功能必须在myext2_functions {入口}。
* /
静态常量zend_function_entry myext2_functions { } = { {
php_fe(你好,null)
php_fe_end
};
/ * myext2_module_entry
* /
zend_module_entry myext2_module_entry = { {
standard_module_header,
myext2
myext2_functions,模块功能 / * * /
NULL,模块初始化
NULL,模块关闭
NULL,请求初始化
NULL,请求关机
空,phpinfo / * * /
php_myext2_version,模块版本 / * * /
standard_module_properties
};
# ifdef compile_dl_myext2
zend_get_module(myext2)
# endif
原始空白(hello)
打印你好世界!。
php_function(你好)
{
php_printf(你好世界!;
}
通过比较由扩展骨架创建的C文件,我们会发现我们的C文件非常简单,基本扩展就足够了。
上面的代码简单明了,大部分注释已经说明了问题:
1。第一个包含要使用的头文件。PHP。H是必要的,它帮助我们包括标准库文件的绝大部分我们都会使用,如stdio. h,h,等程序。
2.myext2_functions定义了函数,我们想暴露结构的数组,每个元素是由php_fe宏观规定,php_fe宏有两个参数,第一个是函数名,可以用于外部,二是参数信息(在这里我们简单地使用null),和最后一个元素必须是php_fe_end.note附注并再次强调每一功能被暴露在外的使用必须在结构数组的定义。
3.myext2_module_entry界定了我们的模块的信息,这是一个结构,和大部分的属性已被注释说明。注意在中间的五个函数指针,我们都简单地设置为null,我们会告诉他们如何在后续的博客。
的4.zend_get_module(myext2)宏功能是通过ifdef宏包含的,所以它是确定是否是它是否被调用。在什么情况下会被调用,什么情况下不会叫,在后续的博客会告诉。
5,我们实现了hello函数的最后几行代码。这很简单。打电话php_printf输出Hello World是完全一样的换行符,php_printf和printf。
6中的注释。而且,为了便于折叠编辑器的使用,我们建议你写这个笔记。
它涉及一些宏,如php_fe,php_fe_end,php_function等等。在随后的博客中完整地介绍这些宏是唯一的方法。最简单的方法是现在记住这些宏。
请注意,我们每个文件的名称、变量的名称、空格和缩进,以及注释都非常规范,遵循这些规范,这样我们就可以编写代码,而PHP代码本身更适合,我们建议您开发使用这种标准的PHP扩展。
最后,编译并运行我们的扩展:
复制代码代码如下所示:
美元/ buildconf力。
美元。 /帮助的grep myext2 |
——enable-myext2使myext2支持
美元。 /配置--禁用所有-- enable-myext2 --启用调试,使保持特稿
为使
PHP开发M美元grep myext2 |
myext2
PHP开发r'hello美元();
你好世界!
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。