简单几步,构建自己的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

截图

903 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 2024-03-23

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

W

楼上有没有加了pgsql扩展编译成功的>=php8.1版本的php静态文件发一个给我,或者发到群里面
我编译5次失败,受不鸟了

  • crazywhalecc 2024-03-24

    编译失败提示什么?

  • crazywhalecc 2024-03-24

    是什么操作系统什么架构,包含什么扩展?

  • W 2024-03-24

    我刚刚试了一下,单独只装一个pgsql扩展就不行了,单独装mysql扩展成功

  • W 2024-03-24

    Ubuntu-20.04.1-x64系统,我要编译的是php8.2

  • W 2024-03-24

    ./spc build --build-cli "pgsql" --debug

  • W 2024-03-24

    报错:

    [09:44:35] [ERRO] #0 phar:///home/root/custom_complie_php/spc/src/SPC/util/UnixShell.php(47): f_passthru('cd '/home/root/...')

    1 phar:///home/root/custom_complie_php/spc/src/SPC/builder/linux/library/libxml2.php(27): SPC\util\UnixShell->exec('cd '/home/root/...')

    2 phar:///home/root/custom_complie_php/spc/src/SPC/builder/LibraryBase.php(144): SPC\builder\linux\library\libxml2->build()

    3 phar:///home/root/custom_complie_php/spc/src/SPC/builder/LibraryBase.php(152): SPC\builder\LibraryBase->tryBuild(true)

    4 phar:///home/root/custom_complie_php/spc/src/SPC/builder/unix/UnixBuilderBase.php(143): SPC\builder\LibraryBase->tryBuild(false)

    5 phar:///home/root/custom_complie_php/spc/src/SPC/command/BuildCliCommand.php(143): SPC\builder\unix\UnixBuilderBase->buildLibs(Array)

    6 phar:///home/root/custom_complie_php/spc/src/SPC/command/BaseCommand.php(99): SPC\command\BuildCliCommand->handle()

    7 phar:///home/root/custom_complie_php/spc/vendor/symfony/console/Command/Command.php(326): SPC\command\BaseCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

    8 phar:///home/root/custom_complie_php/spc/vendor/symfony/console/Application.php(1078): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

    9 phar:///home/root/custom_complie_php/spc/vendor/symfony/console/Application.php(324): Symfony\Component\Console\Application->doRunCommand(Object(SPC\command\BuildCliCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

    10 phar:///home/root/custom_complie_php/spc/vendor/symfony/console/Application.php(175): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

    11 phar:///home/root/custom_complie_php/spc/bin/spc(20): Symfony\Component\Console\Application->run()

    12 /home/root/custom_complie_php/spc(8): require('phar:///home/ro...')

    13 {main}

  • W 2024-03-24

    Linux ser920707457644 5.4.0-110-generic #124-Ubuntu SMP Thu Apr 14 19:46:19 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

W

上面报错显示不全,我截图这里看
截图

  • crazywhalecc 2024-03-25

    如果可以的话麻烦在 static-php-cli 的 Git 仓库提个 Issue,我近期会统一处理。似乎是有关 CentOS 特定环境下编译 libxml2 库导致的问题,我需要过几天有时间搞个虚拟机试试。
    如果可以的话,建议在 Alpine Linux 或克隆仓库后使用 bin/spc-alpine-docker (一键从 Docker Alpine 中)构建。

  • W 2024-03-25

    已提 Issue

W

截图
这个地址好像打不开了

  • 暂无评论

xiaopi

-260
积分
0
获赞数
0
粉丝数
2022-02-17 加入
🔝