侧边栏壁纸
博主头像
七哥的技术博客

You got a dream, you gotta to protect it!

  • 累计撰写 87 篇文章
  • 累计创建 77 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

不同平台下编译php源码

admin
2025-01-15 / 0 字 /

windows平台编译

前提需要准备好 vs2022 环境

下载 php sdk,地址 https://github.com/php/php-sdk-binary-tools 中的 release 下载最新版本

解压到比如 d:\develop\php-sdk 目录下

在系统的开始菜单中,找到 x64 Native Tools Command Prompt for vs 2022 点击运行

命令行中切换到 php-sdk 目录下,运行构建初始化脚本 phpsdk-vs17-x64.bat 进入到 $ 操作符下

在 $ 操作符下切换到 php-src 源码目录

php 源码从 github 下载 https://github.com/php/php-src ,切换到指定构建分支

运行 buildconf 生成配置文件,然后运行 configure.bat 初始化编译配

如有需要编译的插件在这里进行配置,如 curl 的插件编译配置,不编译插件直接 configure 就可以

configure --enable-curl --with-curl="C:\path\to\curl" --with-openssl="C:\path\to\openssl" --with-zlib="C:\path\to\zlib"

配置完毕之后,使用 nmake 进行编译,稍等一会就编译完毕了

编译完毕后,在 php-src 目录下生成一个 x64 的编译目录,结构如下

ubuntu平台编译

首先使用 apt upate 进行更新系统,并使用以下命令安装依赖包

sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libbz2-dev \
   libsqlite3-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libonig-dev

如果需要 openssl 的支持,下载 1.1.1 的版本 wget https://www.openssl.org/source/openssl-1.1.1.tar.gz 进行构建

编译 openssl 库安装到 /root/openssl 目录,然后配置环境变量

#openssl
export OPENSSL_DIR=/root/openssl
export CPPFLAGS="-I$OPENSSL_DIR/include"
export LDFLAGS="-L$OPENSSL_DIR/lib"
export PKG_CONFIG_PATH="$OPENSSL_DIR/lib/pkgconfig"

将本地的 php 代码切换到对应的分支,再使用以下命令进行构建,编译后输出在 sapi 目录下,如 php 执行文件位置在 sapi/cli/php

配置的时候指定安装路径为 /root/php74d ,编译方式不指定的话全部会静态编译链接到 php 可执行文件中

./buildconf --force
./configure --enable-debug --prefix=/root/php74d \
            --enable-fpm \
            --with-fpm-user=root \
            --with-fpm-group=root \
            --enable-phar \
            --enable-cli \
            --enable-mbstring \
            --enable-sockets \
            --enable-opcache \
            --with-zlib \
            --with-bz2 \
            --with-curl \
            --with-openssl=/root/openssl \
            --with-mysqli \
            --with-pdo-mysql
make -j4
make install

如果需要编译为动态库,需要对每一个组件进行单独指定, 如 --enable-posix=shared 表示将 posix 这个库编译为动态库

组件编译为动态库后,在 php.ini 文件中需要进行指定,才会被 php 在运行的时候加载加载,如指定为 extension=posix.so

使用 php -m 可以查看编译的 php 中的组件有哪些

root@ubuntu-10-241:~/develop/php-src# ./sapi/cli/php -m 
[PHP Modules]
Core
ctype
date
dom
fileinfo
filter
hash
iconv
json
libxml
pcre
PDO
pdo_sqlite
Phar
posix
random
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter

[Zend Modules]

如果需要编译更多的组件,可以通过指令进行 ./configure --enable-mbstring --with-curl 指定

这里有 enable 和 with,其中 enable 表示不需要外部依赖的, with 表示需要外部依赖的

如果一个扩展对外部有依赖的话,需要保证依赖已经安装,不然 configure 的时候会报错

在编译构建第三方扩展的时候需要使用到的一个工具是 phpize,这是一个脚本在 build/phpize.in 位置

当进行 make install 的时候,会将该文件拷贝到安装目录下的 phpize,并进行一些变量的修正,如 @prefix 这些变量

当下载扩展源码后,就可以使用这里的 phpize 指令进行编译,如需要编译一个名为 extname 的扩展

cd extname
phpize
./configure
make
sudo make install
0

评论区