平台开发 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构建已准备好,下一步进行开发。