鉴于之前的老版本是纯 Bash 写的,扩展性不是很好,而且里面的库、扩展无法及时使用最新版,所以一怒之下重写了整个编译项目。新版本支持旧版本的所有扩展,同时也新增了很多扩展。
https://github.com/crazywhalecc/static-php-cli
新版本可以手动本地在 Debian、Ubuntu、Alpine、macOS 下构建,也可以在 GH Action 手动触发构建。同时支持了一些新的特性:
cli
、micro
、fpm
、embed
)。--enable-zts
)。cli
模式。pgsql
、snappy
、swow
、apcu
等,详见 支持扩展列表。目前测试了下 Workerman 和 webman 项目都可以正常构建和运行。
太好了,非常感谢你的项目,非常棒
望尔等项背
可以增加oracle和SqlServer的扩展吗
这个很困难了,因为目前编译的是都支持 in-tree 构建的扩展,而扩展本身也不能依赖不开源的第三方库(除非依赖库提供静态链接的库 .a)。
windows还没支持么
Windows不是Unix系统,需要用到一套全新的工具链,且很多扩展没办法直接提供支持。所以写起来比较麻烦一点。
大大牛皮
大佬,什么可以减少打包后体积的方法吗?
如果是二进制本身,那现在已经做了一定程度的优化了,包括strip、-Os等优化。如果是后面跟着的phar归档,可以在添加时对每个文件去除空格的方式来减少。目前micro打了phar补丁也可以采用gzip方式压缩体积,但不确定会不会有bug。
好的,感谢回复。
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.
如果是 GitHub Action 构建,建议先删除 Action Cache,并且 sync fork 后再编译。如果是本地编译,git pull 更新项目后,删除
source
,downloads
,buildroot
目录后再次构建。因为近期 curl 发布了 8.1.0 新版本,增加了编译过程中对 argv 的检查,而默认本项目对 CMake 项目使用了交叉编译的参数,导致检查无法正常进行。最近一次也修复了这个问题,但需要清除旧的编译数据。(source 目录保存的是编译源码目录,buildroot 保存的是编译目标文件,downloads 保存的是依赖库下载压缩包)mongodb扩展不行?
mongodb可以啊,是有啥报错吗,在你那边编译
👍
mongodb扩展,mac本地编译和 GitHub Action 构建都会报错
这周修复。
这个问题和mongodb官方的驱动代码有关,它没有提供几个可选库的禁用编译参数选项,而且它默认会搜索系统路径无法忽略,以至于在configure阶段认为有库,在link阶段找不到libxxx.a的库从而导致报错。已向mongodb库提Issue,如果近期无法解决,我先会patch资源让它禁用掉。
大佬,打包php8.1版本 cli启动有 zend_mm_heap corrupted 错误,不知道是什么导致的
是 Action 编译的还是本地编译的?如果是本地的话,每次编译完最好删除 source 和 buildroot 目录再进行新的编译,有时候在不同扩展下多次编译会出现这种情况。如果这样还能稳定复现的话,麻烦提供一下编译的命令和编译出来的二进制文件。
是php版本的问题,8.1.15 就会有,8.1.19就没有,换一个版本就好了
如何添加自定扩展?比如swoole_loader
不可能的别想了,一切的扩展 so 都不可能被加载 (除非mac系统)
牛逼大佬
打包出来的micro.sfx与webman.phar结合成一个文件后,运行提示:Only run in command line mode;
打印PHP_SAPI的值等于micro
选择名称含有cli的sfx文件试试
buildroot/bin目录下只有一个micro.sfx,没看到有其他的
直接下载的选择micro_cli.sfx
dixyes/lwmbs 这个项目的discussions里的FAQ里咨询过作者,micro.sfx、micro_cli.sfx的区别(后者SAPI name为cli),不知道crazywhalecc/static-php-cli的作者是否也是一致的处理方式
目前 static-php-cli 编译的 phpmicro 没开启 sapi 转换,也就是
-DPHP_MICRO_FAKE_CLI
这个编译选项。主要是这个选项虽然省事但是入侵了原有的 SAPI,不考虑使用这种方式。如果可能的话,修改 PHP 代码中判断 SAPI 的逻辑是更好的一劳永逸解决方案。改代码的话好多地方都要改,而且要改webman框架里面的代码,有点麻烦
下个版本workerman做下兼容,允许 micro 运行
micro 最不爽的地方就是目前不支持一些第三方 so 二进制扩展比如:sow sg13 14 以及自己定义的一些加密扩展
php的扩展或者compsoer包是否也有检测当前环境sapi name是否为cli的情况?
我后面还是加个编译参数吧,毕竟可选更好一点。但默认还会是 micro。另外 composer 包应该有检测 sapi 环境的,但这个得看扩展对应的代码了,一般 composer 扩展都是通用 fpm、cli 所以单独判断的不多。
我看了有其他compsoer包也有检查PHP_SAPI
预算1000人民币
找人给static-php-cli 增加一个 加密代码的扩展 能不能搞
厉害
牛逼,这样子可以相对更轻松的用K8s跑php了!
大佬 你们为啥都这么卷啊,php 都上k8s
PHP怎么卷也还是PHP[斜眼]
项目的成败和语言无关,在编程圈很多人不看好PHP可是不论你baidu 还是gg,随便搜索各种关键词,你会发现80%的搜索关键词结果:至少得有50%以上的网站都是PHP语言的
你好,请问我这个是什么原因呢,嘤特尔的mac ,下载的是这个文件,https://dl.zhamao.xin/static-php-cli/php-8.0.28-cli-linux-x86_64.tar.gz ,执行报错
试试 xxx-macos-aarch64.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
先执行
bin/spc doctor
看看有什么问题?我改用Actions 构建了,php8+版本都没问题,php7.4貌似不行,提示版本要大于8
7.4版本只能编译 cli 和 fpm,不能编译 micro,micro 现在不支持 < 8.0 了。
好的
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构建的时候,应该是镜像没了 或者没有权限了
请问这个可以当做PHP的源码加密来使用吗? 反向解密容易吗
https://static-php-cli.zhamao.me/zh/faq/#%E4%BD%BF%E7%94%A8-micro-%E5%8F%AF%E4%BB%A5%E4%BF%9D%E6%8A%A4%E6%88%91%E7%9A%84%E6%BA%90%E7%A0%81%E5%90%97
可以在编译前 把源码混淆,但是目前还不支持第三库扩展形式的加密,比如:swoole sg13 sg14 等等,只能goto混淆而且兼容相当差。正常能跑的混淆代码。在php-cli 中好多都不能跑,这是目前唯一的硬伤。等什么时候支持第三方扩展加密源码就好了。
有静态的 php 单文件吗。想要下载使用。
https://www.workerman.net/q/10099
看过了,不支持mac的。只能linux下。我只是想开发的时候,vscode可以格式化。又不想下载整个php
macOS下开发可以用Laravel Herd,它也是用了static-php-cli作为php运行环境的。你可以在https://dl.zhamao.xin/static-php-cli/下载mac版本的,也可以直接用Herd,还带Nginx等。
下载的可以执行命令。
用 swoole-cli ,支持 macos https://www.swoole.com/download