在 Linux 上设置 PHP 构建环境
PHP 扩展程序是用 C 语言编写的,在开发扩展程序时,我们需要关心内存管理、数组边界和许多其它底层问题。因此,从零开始开发扩展几乎不可能没有错误,所以我们必须对它们进行调试。这就是我强烈建议你在 Linux 上设置 PHP 构建环境时创建一个 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.com 克隆 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。为了节省时间,可以使用 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=GMT
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
在 PATH
中加入 PHP 二进制文件以覆盖 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 构建已准备就绪,可以开始开发。