PHP及PHP 插件编译

今后文章会同步更新在我的 CSDN 博客,哪里首发不一定。但是一般的博文都会有配图,因此应该还是以 GitHub主阵地的(除非哪天 GitHub DMCA 了这个博客 Repo 2333)。CSDN 还有一个好处是可以被国内的搜索引擎抓取到,嗯,这对没有国内 ICP 备案号的我是天大的福利啊。

顺便,如果有人只想看完整写完的文章的话,也请左拐 CSDN,或者这里。主站开了 Cloudflare 加速,顺便做了 Google 和 Bing 的搜索引擎收录。最近身体欠佳。原定的学习计划和博客更新计划也不出意外的咕了。没有办法。健康是第一要务。等待过后慢慢去补吧。

编译 PHP

安装必要环境

包含编译器,和编译需要的库。所有的编译操作均在 Ubuntu 19.04 下进行。

sudo apt-get update
sudo apt install -y gcc g++ cmake make libxml2-dev libbz2-dev libcurl4-gnutls-dev libzip-dev libwebp-dev libpng-dev libjpeg-dev libxpm-dev libfreetype6-dev

下载源码

你可以 clone GitHub 上的代码:

git clone https://github.com/php/php-src.git

当然也可以到 php.net 下载源码并解压:

wget https://www.php.net/distributions/php-7.3.7.tar.gz
tar -xvzf php-7.3.7.tar.gz
rm php-7.3.7.tar.gz
cd php-7.3.7/

开始编译

首先读取插件列表(插件列表没有修改的时候可跳过此步骤):

./buildconf --force

然后进行基本配置:

mkdir phpbin
./configure \
            --prefix=~/文档/phpbin \ # 是非程序文件 install 的位置
            --exec-prefix=~/文档/phpbin \ # 是程序文件 install 的位置
            --enable-fpm \
            --enable-cli \
            --enable-embed=shared \
            --enable-phpdbg \
            --enable-phpdbg-webhelper \
            --enable-phpdbg-debug \
            --enable-debug \
            --enable-bcmath \
            --enable-calendar \
            --enable-exif \
            --enable-ftp \
            --enable-intl \
            --enable-mbstring \
            --with-curl \
            --enable-embedded-mysqli \
            --enable-pcntl \
            --enable-shmop \
            --enable-soap \
            --enable-sockets \
            --enable-sysvmsg \
            --enable-sysvsem \
            --enable-sysvshm \
            --enable-wddx \
            --enable-zip \
            --with-zlib \
            --with-zlib-dir \
            --with-pcre-jit \
            --with-pcre-regex \
            --with-iconv \
            --enable-mysqlnd \
            --enable-pdo \
            --enable-hash \
            --enable-ctype \
            --enable-json \
            --enable-session \
            --enable-xml \
            --enable-libxml \
            --enable-simplexml \
            --enable-fileinfo \
            --with-openssl \
            --with-gd \
            --with-webp-dir \
            --with-jpeg-dir \
            --with-png-dir \
            --with-xpm-dir

随后手动修改Makefile,手动将CFLAGS_CLEAN改成如下内容:

CFLAGS_CLEAN = -I/usr/include -g -O0 -Wall $(PROF_FLAGS)

最后,开始多线程编译:

make all -j8
make install

php 程序主文件在 ~/文档/phpbin/bin/php 处。

生成插件

生成插件需使用刚刚编译好的php可执行文件。当然你也可以额外在系统中安装一套php(环境)以备不时之需。

sudo apt install -y apache2 php7 php-xdebug mysql-server mysql-client

随后到php源码文件夹、ext文件夹下,运行

php ./ext_skel.php --ext hello_obj

如果已知插件应用的平台的话,可以加上--onlyunix--onlywindows 避免生成其他平台的config文件。

config.m4文件中,注意前面的编译命令部分,如果你的插件是独立的,取消掉下面两行的注释(dnl):

PHP_ARG_ENABLE(hello_obj, whether to enable hello_obj support,
[  --enable-hello_obj          Enable hello_obj support], no)

但是如果你的插件依赖了其他插件的代码(头文件等),你需要保持上面两行的注释并取消下面两行的注释:

PHP_ARG_WITH(hello_obj, for hello_obj support,
[  --with-hello_obj             Include hello_obj support])

注意,不同段的注释要保证对齐。

编译插件

最常见的两种方法:重新编译php本体和使用phpize单独编译插件。

编译php本体的办法很简单,即在./configure步骤处看情况加入--enable-hello_obj--with-hello_obj 参数即可。这种情况下,当没有php.ini配置文件时,插件是默认启用的,利用

php -r "phpinfo();"

命令可以查看phpinfo()输出信息。

用phpize的话,请注意使用 你编译PHP时prefix指定的目录下的phpize(~/文档/phpbin/bin/phpize),保证版本一致。

随后执行

./configure --with-php-config=<php-config bin>

其中php-config bin 为 你编译PHP时prefix指定的目录下的php-config(~/文档/phpbin/bin/php-config)

编译并安装。

make
make install

.so文件会自动复制到插件文件夹。在php.ini中加载插件即可。

extension=hello_obj.so

当然,你也可以用phpize编译安装Xdebug等外置php插件。

原创。发于https://www.zhouweitong.site/2019/07/23/018-php-7-3-compile-and-ext/

你可能感兴趣的:(代码开发,php,php插件,php,ext,php开发,phpize)