自己编译php静态文件目的
1.定制自己需要的php扩展
2.修改php配置,如memory_limit的大小
编译环境:
Ubuntu 18.04.3 LTS
参考文档:
https://www.workerman.net/q/10099
https://github.com/crazywhalecc/static-php-cli
步骤一
生成编译命令,勾选自己需要的扩展、需要编译的php版本、php.ini选项
地址:https://static-php.dev/zh/guide/cli-generator.html
步骤二
下载static-php-cli 可执行文件,根据编译平台下载不同的文件,我这里下载的是spc-linux-x86_64
,保存到/home/root/custom_complie_php/目录下
下载地址:https://dl.static-php.dev/static-php-cli/spc-bin/nightly/
步骤三
进入/home/root/custom_complie_php/目录,使用spc-linux-x86_64
执行编译命令
# 检查环境依赖,并根据提示的命令安装缺失的编译工具
$ ./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
上面的生成的php包太大了,有60M,我对比了官方维护的php的扩展,在官方包的基础上只增加了apcu扩展,重新编译后是26M
apcu扩展需要配置一系列ini,可以在编译的时候直接配置:
apc.enabled=1 # 开启默认就是开启
apc.enable_cli=1 # 开启cli下使用,默认是关闭
apc.shm_segments=1
apc.shm_size="1024M" #内存容量,默认是32M
apc.gc_ttl=43200 # 过期时间,默认是3600s
对应的编译参数:
Tips: 构建环境选项直接选择“独立spc二进制”和平台后,可在下面直接显示下载spc二进制的命令。
老哥稳
还有个问题我还没搞清,就是workerman官网维护的php8.1.mirco文件打印PHP_SAPI的值是cli ,然后我自己编译的mirco文件打印的PHP_SAPI的值却是mirco,这是有什么编译参数控制的么? 最终结果就是workerman有个判断cli环境的方法会验证不通过,导致程序不能运行。 不过昨天老大已经帮我重新提交一个workerman最新版解决这个问题了。 我就是好奇是有啥编译参数控制的么
https://www.workerman.net/q/12087
bin/spc build 的
--with-micro-fake-cli
参数。感谢
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
测试结果同上步骤四
centos7.6编译失败,完美!!!
楼上有没有加了pgsql扩展编译成功的>=php8.1版本的php静态文件发一个给我,或者发到群里面
我编译5次失败,受不鸟了
编译失败提示什么?
是什么操作系统什么架构,包含什么扩展?
我刚刚试了一下,单独只装一个pgsql扩展就不行了,单独装mysql扩展成功
Ubuntu-20.04.1-x64系统,我要编译的是php8.2
./spc build --build-cli "pgsql" --debug
报错:
[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}
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
https://www.workerman.net/a/1662
上面报错显示不全,我截图这里看
如果可以的话麻烦在 static-php-cli 的 Git 仓库提个 Issue,我近期会统一处理。似乎是有关 CentOS 特定环境下编译 libxml2 库导致的问题,我需要过几天有时间搞个虚拟机试试。
如果可以的话,建议在 Alpine Linux 或克隆仓库后使用
bin/spc-alpine-docker
(一键从 Docker Alpine 中)构建。已提 Issue
这个地址好像打不开了