php 扩展开发的好处,PHP 扩展开发初探

什么是 PHP 扩展

通俗说,PHP 扩展是增强 PHP 语言功能的插件。PHP 提供了编程语言的语法,比如分支、循环、函数、类等,这些是 PHP 本身所提供的。在某些情况下需要在 PHP 语言的基础上进行扩展,那么就需要通过 PHP 底层提供的数据结构和接口来开发 PHP 扩展,从而来补充或扩展 PHP 语言,使之更加的强大。当然了,PHP 本身就已经集成了一些基本的、强大的、优秀的 PHP 扩展。

PHP 扩展的好处

从上面的了解得知,PHP 扩展可以在 PHP 原有的基础上来扩展 PHP 的功能,使之更为的强大。另一方面,PHP 扩展可以通过“插件式”的方式来管理和维护 PHP 的功能,如果将全部的功能整合到 PHP 语言中,PHP 想必会过于臃肿,且又不够灵活。而有了扩展,就解决了这样的问题。

PHP 扩展的存在形式

在 Linux 系统下,PHP 扩展以 .so 文件存在,在 Windows 下以 .dll 文件存在。

什么时候使用 PHP 扩展

单独的使用 PHP 语言并不能满足所有的开发,比如在项目中使用 Redis 或 MongoDB 时,就需要相应的 PHP 扩展,来增强 PHP 语言,让 PHP 可以来操作 Redis 或者 MongoDB,以完成更加功能强大的项目。

什么时候开发自己的 PHP 扩展

开发自己的 PHP 扩展是必须的么?其实不是。通常情况下,作为一个 PHPer 是不需要自己开发 PHP 扩展的,但是某些情况下可能是必须要开发 PHP 扩展的。比如,我就遇到了这样的问题。合作的第三方提供了 Windows 下的动态链接库文件(.dll 文件,非 COM 的 DLL 文件),而我又没有找到如何在 PHP 下加载调用 DLL 文件的方式,因此我需要写 PHP 扩展,通过 PHP 的扩展来加载和调用第三方提供的 DLL 文件。

开发自己的 PHP 扩展

在前面我已经提到了我遇到的问题,合作的第三方提供了 Windows 下的动态链接库文件,而我又没有找到 PHP 下加载和调用 DLL 文件的方式,因此决定自己编写 PHP 扩展来加载和调用第三方提供的 DLL 文件中的导出函数。以下,就是我对于搭建开发 PHP 扩展环境和编译 PHP 扩展源码的记录。

准备工具

首先说明一点,DLL 文件只能在 Windows 系统上运行,Linux 系统上是无法进行运行的。那么,我们这个扩展是不考虑 Linux 系统的,只考虑 Windows 系统即可。因此,准备的开发工具是 VS2015。起初,我在网上查找了一些资料,很多资料中都写到,在 Windows 下开发 PHP 扩展需要安装 CygWin,经过我自己的学习,可以告诉大家“不需要”。当然了,我们的扩展只在 Windows 系统上运行,如果需要在 Linux 系统上运行,是否需要 Cygwin 我就不得而知了。当然了,其他版本的 VS 也应该是可以的,只是我只测试了 VS2015 罢了。

下载 PHP 的源代码

除了需要安装 VS2015 以外,还需要下载 PHP 的源码,我下载的源码是 PHP 7.2 的源码。

下载 PHP 源码的地址是:https://windows.php.net/download/

打开该地址后,下载如下图所示的源代码:

5d981db864bb9af7e8a627665efbdc08.png

在这里,下载 PHP 7.2 的源码,并注意在源码下面有一个 VC15 x64 的字样。

下载完的的文件为:php-7.2.20-src.zip

下载完源码进行解压,解压后的目录为:php-7.2.20-src

下载源码并不是一件复杂的事情,但是页面中有多个版本的源码可供下载,选择哪个有时也是比较纠结的问题,这里就下载 php7.2 的源码,因为我本地使用的就是 php7.2 的环境。

创建扩展

进入 php-7.2.20-src\ext 目录下,在该目录下有一个名为 ext_skel_win32.php 的文件,在命令行中执行:

1 php ext_skel_win32.php --extname=loaddll

其中,loaddll 是要创建的扩展的名称。想要成功执行该命令,需要将 PHP 的可执行程序添加到环境变量中。

执行情况如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

λ php ext_skel_win32.php --extname=loaddll

Creating directory loaddll

FIND: Parameter format not correct

chmod: missing operand after ‘644’

Try 'chmod --help' for more information.

FIND: Parameter format not correct

chmod: missing operand after ‘755’

Try 'chmod --help' for more information.

Creating basic files: config.m4 config.w32 .gitignore loaddll.c php_loaddll.h CREDITS EXPERIMENTAL tests/001.phpt loaddll.php [done].

To use your new extension, you will have to execute the following steps:

1. $ cd ..

2. $ vi ext/loaddll/config.m4

3. $ ./buildconf

4. $ ./configure --[with|enable]-loaddll

5. $ make

6. $ ./sapi/cli/php -f ext/loaddll/loaddll.php

7. $ vi ext/loaddll/loaddll.c

8. $ make

标签:php,Windows,初探,扩展,源码,loaddll,PHP

来源: https://www.cnblogs.com/showcase/p/13071715.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值