swoole / swoole-cli

SWOOLE-CLI is a php binary distribution composed swoole & php-core & cli & fpm and mostly of common extensions.
192 stars 35 forks source link

swoole-cli 各分支功能区别 #273

Open jingjingxyk opened 1 year ago

jingjingxyk commented 1 year ago

swoole-cli 各分支功能区别

构建环境 alpine 3.18

支持的扩展列表

分支名称 与主分支的区别 PHP 版本 C 编译器
main 主分支是在 PHP源码基础之上裁剪、优化、添加新功能,详细介绍 8.1.29(固定) clang(固定)
experiment 在 main 分支基础上改进,新增功能特性 8.1.29(固定) clang(固定)
experiment_v4.8.x 在 experiment 分支基础上改进,
swoole版本固定为v4.8.x,
openssl版本为 V1,
curl库不启用 http2、http3支持
8.1.29(固定) clang(固定)
build_native_php
build-static-php
在 experiment 分支基础上改进,
用于构建原生的PHP版本,
可构建生成包含swow扩展的二进制文件 ,PHP源码未裁剪
8.2.23 (允许指定其它版本) clang(默认), gcc
php-fpm 在 build_native_php 分支基础上改进,
不包含swoole扩展 ,
启用PHP FastCGI
用于构建原生的PHP-FPM
8.2.23 (允许指定其它版本) clang(默认), gcc
build_native_php_sfx_micro 在 build_native_php 分支基础上改进,
只构建 phpmicro 版本
8.2.23 (允许指定其它版本) clang(默认), gcc
build_php_7.4 在 build_native_php 分支基础上改进,
swoole版本固定为v4.8.x,
openssl版本为 V1,
curl库不启用 http2、http3支持
7.4.33 (允许指定其它次版本) clang(默认), gcc
php-fpm-7.4 在 build_php_7.4 分支基础上改进,
不包含swoole 扩展
openssl版本为 V1,
curl库不启用 http2、http3支持
启用PHP FastCGI,
用于构建原生的PHP-FPM
7.4.33 (允许指定其它次版本) clang(默认), gcc
build_php_7.3 在 build_php_7.4 分支基础上改进,
gd、zip、imagick扩展 未能启用 ,
swoole版本固定为v4.8.x,
openssl版本为 V1,
curl库不启用 http2、http3支持 ,
7.3.33 (允许指定其它次版本) gcc(固定)
jingjingxyk commented 1 year ago

experiment 分支新增:

  1. 允许指定扩展下载地址
  2. 可以使用curl 、 git 等方式下载库或者扩展,
  3. 新增简易webui 辅助: https://swoole-cli-ui.jingjingxyk.com/
  4. 新增快速初始化PHP 运行环境脚本setup-php-runtime.sh
  5. 编译gd 扩展,扩展启用依赖 libavif 库,为了支持 avif 格式的图片,编译时添加 --with-libavif=1

build_native_php分支新增:

  1. 继承 experiment 分支功能
  2. 可指定 PHP 版本,例如: --with-php-version=8.2.11
  3. 可指定 C 编译器 为GCC,例如: --with-c-compiler=gcc
  4. 可指定 构建类型,用于新增扩展时,验证扩展启用参数,例如: --with-build-type=dev
  5. 可指定 http 代理,用于下载,扩展和依赖库 ,例如: --with-http-proxy=http://192.168.3.26:8015
  6. 可编译swow扩展的PHP可执行文件,例如: php prepare.php -swoole +swow
  7. 可在 debian 、ubuntu 容器环境中验证静态编译
jingjingxyk commented 1 year ago

PHP 静态编译 完整的流程

(只启用redis 扩展 和 默认扩展)

要添加扩展,你只要依照添加redis 方式添加即可(过程中,你会发现需要解决很多很多静态链接库问题)

解决静态链接库问题,并且把解决步骤固定下来,也就是swoole-cli 项目做的事情

准备构建环境,alpine:3.17

运行容器,并将自动进入容器终端

docker run --rm   -ti --init  -w /work alpine:3.17

安装构建环境必要软件包

apk update

apk add vim alpine-sdk xz autoconf automake linux-headers clang-dev clang lld libtool cmake bison re2c gettext coreutils gcc g++
apk add bash p7zip zip unzip flex pkgconf ca-certificates
apk add wget git curl
apk add libc++-static libltdl-static
apk add vim 

准备构建脚本

vi build-static-php.sh

#!/bin/env bash
set -uex

PHP_VERSION=8.1.21

test -f php-${PHP_VERSION}.tar.gz || wget -O php-${PHP_VERSION}.tar.gz https://github.com/php/php-src/archive/refs/tags/php-${PHP_VERSION}.tar.gz
test -d php-src && rm -rf php-src
mkdir -p php-src
tar --strip-components=1 -C php-src -xf php-${PHP_VERSION}.tar.gz

test -f redis-5.3.7.tgz || wget -O redis-5.3.7.tgz https://pecl.php.net/get/redis-5.3.7.tgz
mkdir -p redis
tar --strip-components=1 -C redis -xf redis-5.3.7.tgz

test -d php-src/ext/redis && rm -rf php-src/ext/redis
mv mongodb php-src/ext/

export CC=clang
export CXX=clang++
export LD=ld.lld

cd php-src

./buildconf --force

./configure \
  --disable-all \
  --disable-cgi \
  --enable-shared=no \
  --enable-static=yes \
  --enable-cli \
  --disable-phpdbg \
  --without-valgrind \
  --enable-session \
  --enable-redis

make -j $(nproc)

file sapi/cli/php
readelf -h sapi/cli/php

执行构建即可

bash build-static-php.sh

# 构建完毕 ,生成的如下文件,就是希望得到的二进制文件
sapi/cli/php 
sapi/cli/php -m 
sapi/cli/php -v 
sapi/cli/php --ri redis 
jingjingxyk commented 1 year ago

swoole-cli 就是在上述基础之上,做了进行裁剪 、优化、整合 、打包 等,并默认启用了swoole 扩展。

jingjingxyk commented 1 year ago

一句命令即可 为 linux 、macOS 准备 PHP 运行环境 (依赖 curl 、wget 、bash 、xz)


curl https://github.com/swoole/swoole-cli/blob/main/setup-php-runtime.sh?raw=true -sSfL | bash -s -- --mirror china
curl https://swoole-cli.jingjingxyk.com/setup-php-runtime.sh  -sSf | bash -s -- --mirror china