平台开发 360云计算

女主宣言






今天小编为大家分享编写PHP扩展的系列文章,文章从环境构建到扩展编写,会对使用到的相关PHP内核数据结构及API进行介绍,希望能对大家有所帮助。

PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!

众所周知PHP语言是由C语言编写,我们今天介绍的PHP扩展也是由C语言来进行开发的。所以在编写PHP扩展时,就需要考虑内存管理、数组边界以及其他底层语言的相关问题。因此,在编写PHP扩展时,很难说不会产生任何错误,所以就需要进行相应的调试。所以我们建议在Linux环境下,创建一个“DEBUG”的PHP构建环境,有助于更早的发现相关问题。

基于Linux从源码构建PHP也不会太复杂。但是,首先需要安装必要的开发组件,其中包括C编译器、链接器、库以及头文件。我们使用Linux的包管理器来进行操作。

Ubuntu/Debian环境:

$ sudo apt-get install build-essential autoconf automake bison flex re2c gdb \
   libtool make pkgconf valgrind git libxml2-dev libsqlite3-dev

RedHat/Fedora环境:

$ sudo dnf install gcc gcc-c++ binutils glibc-devel autoconf automake bison \
   flex re2c gdb libtool make pkgconf valgrind git \
   libxml2-devel libsqlite3x-devel

现在,我们可以从github克隆PHP GIT库,然后切换到所需的PHP版本(默认使用master分支或新版的PHP 8)。

$ git clone https://github.com/php/php-src.git
$ cd php-src
$ git checkout php-7.4.1 (switch to tag/branch of necessary PHP version)

接下来,配置PHP。我们将构建一个“DEBUG”版本的PHP,安装到home目录并且使用自定义的php.ini配置文件。“./configure”命令可以使用附近选项扩展,具体取决于你的PHP构建需求。可以指定:

  • 使用哪种SAPI(CLI、FastCGI、FPM、Apache)

  • 启用或禁用嵌入式PHP扩展及其选项

想要获取完整的配置选项,可以执行“./configure -help”查看。

$ ./buildconf --force
$ ./configure --enable-debug \
   --prefix=$HOME/php-bin/DEBUG \
   --with-config-file-path=$HOME/php-bin/DEBUG/etc

通常,需要与现有已安装版本进行相似的构建配置。为了节省时间,可以使用“php -i | grep ‘Configure Command’”获取现有构建的配置选项,并添加到“./configure”命令中。注意,构建一些PHP扩展可能需要安装其他库或者头文件,通常在此步骤中检查所有程序包依赖项。

最后,当configure成功时,编译并安装PHP构建:

$ make -j4
$ make install
$ cd ..

现在我们需要创建自定义的php.ini:

$ mkdir ~/php-bin/DEBUG/etc
$ vi ~/php-bin/DEBUG/etc/php.ini

应包含以下内容,启用错误报告并尽早发现可能的错误:

date.timezone="Asia/Shanghai"
max_execution_time=30
memory_limit=128M

error_reporting=E_ALL | E_STRICT ; catch all error and warnings
display_errors=1
log_errors=1

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.protect_memory=1      ; catch invalid updates of shared memory

将PHP添加到PATH环境变量中,覆盖系统中的PHP:

$ export PATH=~/php-bin/DEBUG/bin:$PATH

检查是否一切正常:

$ php -v

输出类似以下内容:

PHP 7.4.1 (cli) (built: Jan 15 2020 12:52:43) ( NTS DEBUG )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
   with Zend OPcache v7.4.1, Copyright (c), by Zend Technologies

“DEBUG”PHP构建已准备好,下一步进行开发。