重构版的静态编译 PHP 二进制项目已经完成,可以编译更多扩展了,并且支持 macOS

crazywhalecc

鉴于之前的老版本是纯 Bash 写的,扩展性不是很好,而且里面的库、扩展无法及时使用最新版,所以一怒之下重写了整个编译项目。新版本支持旧版本的所有扩展,同时也新增了很多扩展。

https://github.com/crazywhalecc/static-php-cli

新版本可以手动本地在 Debian、Ubuntu、Alpine、macOS 下构建,也可以在 GH Action 手动触发构建。同时支持了一些新的特性:

  • 支持扩展依赖和特性选择功能,例如你可以随意组合使用扩展和依赖库,例如 gd 库可选增加 libwebp 等功能。
  • 支持构建新的 SAPI(现在支持构建 climicrofpmembed)。
  • 支持构建线程安全版本(使用 --enable-zts)。
  • 支持在编译前硬编码 INI 选项到二进制中。
  • micro 支持在编译时启用伪装 cli 模式。
  • 新增自动检查编译环境是否合格模块,可自动在 Debian、macOS、Ubuntu 等系统安装需要的编译工具。
  • 更多新扩展,例如:pgsqlsnappyswowapcu 等,详见 支持扩展列表

目前测试了下 Workerman 和 webman 项目都可以正常构建和运行。

2358 19 10
19个评论

walkor

太好了,非常感谢你的项目,非常棒

abinx

可以增加oracle和SqlServer的扩展吗

  • crazywhalecc 2023-05-02

    这个很困难了,因为目前编译的是都支持 in-tree 构建的扩展,而扩展本身也不能依赖不开源的第三方库(除非依赖库提供静态链接的库 .a)。

luohonen

windows还没支持么

  • crazywhalecc 2023-05-15

    Windows不是Unix系统,需要用到一套全新的工具链,且很多扩展没办法直接提供支持。所以写起来比较麻烦一点。

li914

大大牛皮

  • 暂无评论
🚀🐘🚀

大佬,什么可以减少打包后体积的方法吗?

  • crazywhalecc 2023-05-18

    如果是二进制本身,那现在已经做了一定程度的优化了,包括strip、-Os等优化。如果是后面跟着的phar归档,可以在添加时对每个文件去除空格的方式来减少。目前micro打了phar补丁也可以采用gzip方式压缩体积,但不确定会不会有bug。

  • 🚀🐘🚀 2023-05-18

    好的,感谢回复。

luscio

mac编译curl扩展报错了
[00:22:52] [CRIT] Build failed with SPC\exception\RuntimeException: Command run failed with code[2]: cd '/Users/linyangbin/static-php-cli/source/php-src' && make -j8 EXTRA_CFLAGS="-g -Os -fno-ident" EXTRA_LIBS="-framework CoreFoundation -framework SystemConfiguration /Users/linyangbin/static-php-cli/buildroot/lib/libcurl.a /Users/linyangbin/static-php-cli/buildroot/lib/libz.a -lresolv" cli 1>/dev/null 2>&1
[00:22:52] [CRIT] Please check with --debug option to see more details.

  • crazywhalecc 2023-05-20

    如果是 GitHub Action 构建,建议先删除 Action Cache,并且 sync fork 后再编译。如果是本地编译,git pull 更新项目后,删除 sourcedownloadsbuildroot 目录后再次构建。因为近期 curl 发布了 8.1.0 新版本,增加了编译过程中对 argv 的检查,而默认本项目对 CMake 项目使用了交叉编译的参数,导致检查无法正常进行。最近一次也修复了这个问题,但需要清除旧的编译数据。(source 目录保存的是编译源码目录,buildroot 保存的是编译目标文件,downloads 保存的是依赖库下载压缩包)

  • luscio 2023-05-23

    mongodb扩展不行?

  • crazywhalecc 2023-05-23

    mongodb可以啊,是有啥报错吗,在你那边编译

artisan

👍

  • 暂无评论
luscio


mongodb扩展,mac本地编译和 GitHub Action 构建都会报错

  • crazywhalecc 2023-05-26

    这周修复。

  • crazywhalecc 2023-05-29

    这个问题和mongodb官方的驱动代码有关,它没有提供几个可选库的禁用编译参数选项,而且它默认会搜索系统路径无法忽略,以至于在configure阶段认为有库,在link阶段找不到libxxx.a的库从而导致报错。已向mongodb库提Issue,如果近期无法解决,我先会patch资源让它禁用掉。

tanhongbin

大佬,打包php8.1版本 cli启动有 zend_mm_heap corrupted 错误,不知道是什么导致的

  • crazywhalecc 2023-05-26

    是 Action 编译的还是本地编译的?如果是本地的话,每次编译完最好删除 source 和 buildroot 目录再进行新的编译,有时候在不同扩展下多次编译会出现这种情况。如果这样还能稳定复现的话,麻烦提供一下编译的命令和编译出来的二进制文件。

  • tanhongbin 2023-05-26

    是php版本的问题,8.1.15 就会有,8.1.19就没有,换一个版本就好了

zhqing

如何添加自定扩展?比如swoole_loader

  • kspade 2023-06-07

    不可能的别想了,一切的扩展 so 都不可能被加载 (除非mac系统)

wekyun

牛逼大佬

  • 暂无评论
touer

打包出来的micro.sfx与webman.phar结合成一个文件后,运行提示:Only run in command line mode;

  • touer 2023-08-01

    打印PHP_SAPI的值等于micro

  • artisan 2023-08-06

    选择名称含有cli的sfx文件试试

  • touer 2023-08-07

    buildroot/bin目录下只有一个micro.sfx,没看到有其他的

  • artisan 2023-08-07

    直接下载的选择micro_cli.sfx

  • artisan 2023-08-07

    dixyes/lwmbs 这个项目的discussions里的FAQ里咨询过作者,micro.sfx、micro_cli.sfx的区别(后者SAPI name为cli),不知道crazywhalecc/static-php-cli的作者是否也是一致的处理方式

  • crazywhalecc 2023-08-08

    目前 static-php-cli 编译的 phpmicro 没开启 sapi 转换,也就是 -DPHP_MICRO_FAKE_CLI 这个编译选项。主要是这个选项虽然省事但是入侵了原有的 SAPI,不考虑使用这种方式。如果可能的话,修改 PHP 代码中判断 SAPI 的逻辑是更好的一劳永逸解决方案。

  • touer 2023-08-09

    改代码的话好多地方都要改,而且要改webman框架里面的代码,有点麻烦

  • walkor 2023-08-09

    下个版本workerman做下兼容,允许 micro 运行

  • kspade 2023-08-09

    micro 最不爽的地方就是目前不支持一些第三方 so 二进制扩展比如:sow sg13 14 以及自己定义的一些加密扩展

  • artisan 2023-08-09

    php的扩展或者compsoer包是否也有检测当前环境sapi name是否为cli的情况?

  • crazywhalecc 2023-08-09

    我后面还是加个编译参数吧,毕竟可选更好一点。但默认还会是 micro。另外 composer 包应该有检测 sapi 环境的,但这个得看扩展对应的代码了,一般 composer 扩展都是通用 fpm、cli 所以单独判断的不多。

  • touer 2023-08-11

    我看了有其他compsoer包也有检查PHP_SAPI

  • kspade 13天前

    预算1000人民币
    找人给static-php-cli 增加一个 加密代码的扩展 能不能搞

mon

厉害

  • 暂无评论
mewchen

牛逼,这样子可以相对更轻松的用K8s跑php了!

  • tanhongbin 2023-08-16

    大佬 你们为啥都这么卷啊,php 都上k8s

  • 小W 13天前

    PHP怎么卷也还是PHP[斜眼]

  • kspade 12天前

    项目的成败和语言无关,在编程圈很多人不看好PHP可是不论你baidu 还是gg,随便搜索各种关键词,你会发现80%的搜索关键词结果:至少得有50%以上的网站都是PHP语言的

软饭工程师

截图
你好,请问我这个是什么原因呢,嘤特尔的mac ,下载的是这个文件,https://dl.zhamao.xin/static-php-cli/php-8.0.28-cli-linux-x86_64.tar.gz ,执行报错


使用这个命令编译常用扩展的micro.sfx文件就报错,是什么情况嘞
bin/spc build --build-micro "bcmath,calendar,ctype,curl,dba,dom,exif,filter,fileinfo,gd,iconv,mbstring,mbregex,mysqli,mysqlnd,openssl,pcntl,pdo,pdo_mysql,pdo_sqlite,phar,posix,readline,redis,session,simplexml,sockets,sqlite3,tokenizer,xml,xmlreader,xmlwriter,zip,zlib" --debug

tanhongbin

ERROR: failed to solve: process "/bin/sh -c composer update --no-dev" did not complete successfully: exit code: 2
Unable to find image 'cwcc-spc-x86_64:latest' locally
docker: Error response from daemon: pull access denied for cwcc-spc-x86_64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
Error: Process completed with exit code 125.
大佬,现在报错了 actons构建的时候,应该是镜像没了 或者没有权限了

  • 暂无评论
happy321

请问这个可以当做PHP的源码加密来使用吗? 反向解密容易吗

= - =

有静态的 php 单文件吗。想要下载使用。

crazywhalecc

260
积分
0
获赞数
0
粉丝数
2023-04-30 加入
🔝