简单几步,构建自己的php静态可执行文件

xiaopi
# 检查环境依赖,并根据提示的命令安装缺失的编译工具
$ ./spc-linux-x86_64 doctor

# 依次步骤一生成的两条命令(注意修改./bin/spc为spc-linux-x86_64)
$ ./spc-linux-x86_64  download --all --with-php=8.1 --debug  # 拉取指定版本的所有依赖

# 编译php-cli和micro 
$ ./spc-linux-x86_64  build --build-cli --build-micro "apcu,bcmath,calendar,ctype,curl,dba,dom,exif,filter,fileinfo,gd,iconv,intl,mbstring,mbregex,mysqli,mysqlnd,openssl,opcache,pcntl,pdo,pdo_mysql,pgsql,phar,posix,readline,redis,session,simplexml,sockets,sodium,sqlite3,tokenizer,xml,xmlreader,xmlwriter,xsl,zip,zlib,mongodb,event,soap,shmop,xlswriter,pdo_sqlite" --debug -I "memory_limit=512M"
  • 步骤四
    编译完成,拷贝编译后的可执行文件就可以使用了。目录在当前目录./buildroot/bin/
# 测试,确定我需要的扩展已经安装成功了;memory_limit也改为了512M
$ ./buildroot/bin/php -m | grep apcu
$ ./buildroot/bin/php -r "phpinfo();" | grep memory_limit

截图

815 7 4
7个评论

xiaopi

上面的生成的php包太大了,有60M,我对比了官方维护的php的扩展,在官方包的基础上只增加了apcu扩展,重新编译后是26M

$ ./spc-linux-x86_64 build --build-cli --build-micro "bcmath,apcu,calendar,ctype,curl,dom,event,exif,ffi,fileinfo,filter,gd,iconv,inotify,mbstring,mongodb,mysqlnd,openssl,pcntl,pdo,pdo_mysql,pdo_sqlite,phar,posix,readline,redis,session,shmop,simplexml,soap,sockets,sqlite3,tokenizer,xml,xmlreader,zip,zlib,xmlwriter" --debug -I "memory_limit=512M"
  • 暂无评论
xiaopi

apcu扩展需要配置一系列ini,可以在编译的时候直接配置:
apc.enabled=1 # 开启默认就是开启
apc.enable_cli=1 # 开启cli下使用,默认是关闭
apc.shm_segments=1
apc.shm_size="1024M" #内存容量,默认是32M
apc.gc_ttl=43200 # 过期时间,默认是3600s

对应的编译参数:

$ bin/spc build --build-cli --build-micro "bcmath,apcu,calendar,ctype,curl,dom,event,exif,ffi,fileinfo,filter,gd,iconv,inotify,mbstring,mongodb,mysqlnd,openssl,pcntl,pdo,pdo_mysql,pdo_sqlite,phar,posix,readline,redis,session,shmop,simplexml,soap,sockets,sqlite3,tokenizer,xml,xmlreader,zip,zlib,xmlwriter" --debug -I "memory_limit=512M" -I "apc.enabled=1" -I "apc.enable_cli=1" -I "apc.shm_size=1024M" -I "apc.shm_segments=1" -I "apc.gc_ttl=43200"
  • 暂无评论
crazywhalecc

Tips: 构建环境选项直接选择“独立spc二进制”和平台后,可在下面直接显示下载spc二进制的命令。

  • xiaopi 2023-12-20

    老哥稳
    还有个问题我还没搞清,就是workerman官网维护的php8.1.mirco文件打印PHP_SAPI的值是cli ,然后我自己编译的mirco文件打印的PHP_SAPI的值却是mirco,这是有什么编译参数控制的么? 最终结果就是workerman有个判断cli环境的方法会验证不通过,导致程序不能运行。 不过昨天老大已经帮我重新提交一个workerman最新版解决这个问题了。 我就是好奇是有啥编译参数控制的么
    https://www.workerman.net/q/12087

  • crazywhalecc 2023-12-20

    bin/spc build 的 --with-micro-fake-cli 参数。

  • xiaopi 2023-12-20

    感谢

W

centos7.6编译教程,步骤同上,注意一下
安装git等软件用yum
sudo yum install git

其余截图如下:
1、
截图
2、
截图
3、
截图
4、
截图
4.0、
./spc doctor
4.1、
curl -o spc.tgz https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-x86_64.tar.gz && tar -zxvf spc.tgz && rm spc.tgz
4.2、
./spc download --all --with-php=8.2 --debug
4.3、
./spc build --build-cli "apcu,bcmath,calendar,ctype,curl,dba,dom,event,exif,fileinfo,filter,gd,iconv,intl,mbregex,mbstring,mysqli,mysqlnd,opcache,openssl,pcntl,pdo,pdo_mysql,pdo_pgsql,pdo_sqlite,pgsql,phar,posix,readline,redis,session,simplexml,sockets,sodium,sqlite3,tokenizer,xml,xmlreader,xmlwriter,xsl,zip,zlib" --debug -I "memory_limit=512M"
4.4
测试结果同上步骤四

  • W 24天前

    centos7.6编译失败,完美!!!