外链论坛

 找回密码
 立即注册
搜索
查看: 70|回复: 4

Static-PHP-Cli 静态编译、构建PHP解释器工具

[复制链接]

3008

主题

2万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139175
发表于 2024-7-12 02:12:22 | 显示全部楼层 |阅读模式

Static-PHP-Cli 静态编译、构建PHP解释器工具

介绍

static-php-cli是一个用于静态编译、构建 PHP 解释器的工具,支持众多流行扩展。日前 static-php-cli 支持 clifpmembedmicroSAPI。static-php-cli支持将 PHP 代码和 PHP 运行时打包为一个文件并运行。

特性

构建独立的单文件 PHP 解释器,需任何依赖 构建 phpmicro自执行二进制(将 PHP 代码和 PHP 解释器打包为一个文件) 供给一键检测和修复编译环境的 Doctor 模块 支持多个系统:Linux、macOS、FreeBSD、Windows 高度自定义的代码 patch 功能 自带编译依赖管理 供给自己编译的独立 spc 二进制(运用 spc 和 box 构建) 支持海量 扩展 整合 UPX 工具(减小二进制文件体积) 运用

静态 php-cli

运用 phpmicro 打包 PHP 代码

直接下载

倘若你不想自动编译 PHP,能够从本项目现有的示例 Action 下载 Artifact,能够从自托管的服务器下载。

扩展组合 - common:common 组合包括了约 30+ 个常用扩展,体积为 22MB 上下 扩展组合 - bulk:bulk 组合包括了 50+ 个扩展,体积为 70MB 上下 扩展组合 - minimal:minimal 组合包括了 5 个扩展,体积为 6MB 上下

针对 Windows 系统,日前支持的扩展较少,故仅供给 SPC 自己运行的最小扩展组合的 climicro:扩展组合 - spc-min。

运用 static-php-cli 构建 PHP

编译环境需求

PHP >= 8.1(这是 spc 自己必须的版本,不是支持的构建版本) 扩展:mbstring,tokenizer,phar 系统安装了 curl 和 git

本项目采用 PHP 编写,编译前必须一个 PHP 环境,比较滑稽。但本项目默认可经过自己构建的 micro 和 static-php 二进制运行,其他只必须包括上面说到的扩展和 PHP 版本大于等于 8.1 就可

下面是架构支持状况Github表率支持 GitHub Action 构建, 电脑表率支持本地构建,空 表率暂不支持。

当前支持编译的 PHP 版本:

⚠️ 支持,但可能再也不供给修复

✔️ 支持

❌ 不支持

PHP VersionStatusComment7.2❌

7.3⚠️phpmicro 和许多扩展不支持 7.3、7.4 版本7.4⚠️phpmicro 和许多扩展不支持 7.3、7.4 版本8.0✔️PHP 官方已停止 8.0 的守护8.1✔️

8.2✔️

8.3✔️

支持的扩展

请先按照下方扩展列表选取你要编译的扩展。

扩展支持列表 编译命令生成器

倘若这儿必须的扩展,能够提交 Issue。

在线构建(运用 GitHub Actions)

运用 GitHub Action 能够方便地构建一个静态编译的 PHP,同期能够自动定义要编译的扩展。

Fork 本项目。 进入项目的 Actions,选取 CI。 选取 Run workflow,填入你要编译的 PHP 版本、目的类型、扩展列表。(扩展列表运用英文逗号分割,例如 bcmath,curl,mbstring) 等待大约一段时间后,进入对应的任务中,获取 Artifacts。

倘若选取debug,则会在构建时输出所有日志,包含编译的日志,以供排查错误。

本地构建(运用 spc 二进制)

该项目供给了 static-php-cli 的二进制文件:spc。您能够运用 spc二进制文件,需安装任何运行时(用起来就像 golang 程序)。日前spc二进制文件供给的平台有 Linux 和 macOS。

运用以下命令从自托管服务器下载:

# Download from self-hosted nightly builds (sync with main branch) # For Linux x86_64 curl -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-x86_64 # For Linux aarch64 curl -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-aarch64 # macOS x86_64 (Intel) curl -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-macos-x86_64 # macOS aarch64 (Apple) curl -o spc https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-macos-aarch64 # Windows (x86_64, win10 build 17063 or later) curl.exe -o spc.exe https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-windows-x64.exe # Add execute perm (Linux and macOS only) chmod +x ./spc # Run (Linux and macOS) ./spc --version # Run (Windows powershell) .\spc.exe --version

自托管 spc由 GitHub Actions 构建,你能够从 Actions 直接下载:此处。

本地构建(运用 git 源码)

# clone 仓库就可 git clone https://github.com/crazywhalecc/static-php-cli.git

倘若您的系统上尚未安装 php,咱们意见运用内置的 setup-runtime 自动安装 PHP 和 Composer。

cd static-php-cli chmod +x bin/setup-runtime # it will download static php (from self-hosted server) and composer (from getcomposer) bin/setup-runtime # initialize composer deps bin/composer install # chmod chmod +x bin/spc bin/spc --version

起始构建 PHP

下面是运用 static-php-cli 的基本用法:

倘若运用的是打包好的spc二进制,你必须将下列命令的 ./bin/spc替换为 ./spc

# 检测环境依赖,并按照尝试自动安装缺失的编译工具 ./bin/spc doctor --auto-fix # 拉取所有依赖库 ./bin/spc download --all # 只拉取编译指定扩展必须的所有依赖(举荐) ./bin/spc download --for-extensions="openssl,pcntl,mbstring,pdo_sqlite" # 下载编译区别版本的 PHP (--with-php=x.y,举荐 7.3 ~ 8.3) ./bin/spc download --for-extensions="openssl,curl,mbstring" --with-php=8.1 # 构建包括 bcmath,openssl,tokenizer,sqlite3,pdo_sqlite,ftp,curl 扩展的 php-cli 和 micro.sfx ./bin/spc build "bcmath,openssl,tokenizer,sqlite3,pdo_sqlite,ftp,curl" --build-cli --build-micro # 编译线程安全版本 (--enable-zts) ./bin/spc build "curl,phar" --enable-zts --build-cli # 编译后运用 UPX 减小可执行文件体积 (--with-upx-pack) (最少压缩至原来的 30~50%) ./bin/spc build "curl,phar" --enable-zts --build-cli --with-upx-pack

其中,日前支持构建 cli,micro,fpm 和 embed,运用以下参数的一个或多个来指定编译的 SAPI:

--build-cli:构建 cli 二进制 --build-micro:构建 phpmicro 自执行二进制 --build-fpm:构建 fpm --build-embed:构建 embed(libphp) --build-all:构建所有

倘若显现了任何错误,能够运用 --debug参数来展示完整的输出日志,以供排查错误:

./bin/spc build "openssl,pcntl,mbstring" --debug --build-all ./bin/spc download --all --debug 区别 SAPI 的运用

运用 cli

php-cli 是一个静态的二进制文件,类似 Go、Rust 语言编译后的单个可移植的二进制文件。

采用参数 --build-cli--build-all参数时,最后编译结果会输出一个 ./php的二进制文件,此文件可分发、可直接运用。该文件编译后会存放在 buildroot/bin/目录中,名叫作php,拷贝出来就可

cd buildroot/bin/ ./php -v # 检测版本 ./php -m # 检测编译的扩展 ./php your_code.php # 运行代码 ./php your_project.phar # 运行打包为 phar 单文件的项目

运用 micro

phpmicro 是一个供给自执行二进制 PHP 的项目,本项目依赖 phpmicro 进行编译自执行二进制。详见 dixyes/phpmicro。

采用项目参数 --build-micro--build-all时,最后编译结果会输出一个 ./micro.sfx的文件,此文件必须协同你的 PHP 源码运用。该文件编译后会存放在buildroot/bin/目录中,拷贝出来就可

运用时应准备好你的项目源码文件,能够是单个 PHP 文件,能够是 Phar 文件。

echo " code.php cat micro.sfx code.php > single-app && chmod +x single-app ./single-app

倘若打包 PHAR 文件,仅需把 code.php 更换为 phar 文件路径就可。你能够运用 box-project/box 将你的 CLI 项目打包为 Phar, 而后将它与 phpmicro 结合,生成独立可执行的二进制文件。

# 运用 static-php-cli 生成的 micro.sfx 结合,能够直接运用 cat 命令结合它们 bin/spc micro:combine my-app.phar cat buildroot/bin/micro.sfx my-app.phar > my-app && chmod +x my-app # 运用 micro:combine 结合能够将 INI 选项注入到二进制中 bin/spc micro:combine my-app.phar -I "memory_limit=4G" -I "disable_functions=system" --output my-app-2

有些状况下的 phar 文件或 PHP 项目可能法在 micro 环境下运行。

运用 fpm

采用项目参数 --build-fpm--build-all时,最后编译结果会输出一个 ./php-fpm的文件。该文件存放在 buildroot/bin/目录,拷贝出来就可运用

在正常的 Linux 发行版和 macOS 系统中,安装 php-fpm 后包管理会自动生成默认的 fpm 配置文件。由于 php-fpm 必要指定配置文件才可起步,本项目编译的 php-fpm 不会带任何配置文件,因此自动编写php-fpm.confpool.conf配置文件。

指定 php-fpm.conf能够运用命令参数 -y,例如:./php-fpm -y php-fpm.conf

运用 embed

采用项目参数 --build-embed--build-all时,最后编译结果会输出一个 libphp.aphp-config以及一系列头文件,存放在 buildroot/,你能够在你的其他代码中引入它们。

倘若晓得 embed SAPI,你应该晓得怎样运用它。针对有可能编译用到引入其他库的问题,你能够运用buildroot/bin/php-config来获取编译时的配置。

另一相关怎样运用此功能的高级示例,请查看怎样运用它构建 FrankenPHP 的静态版本。返回外链论坛:www.fok120.com,查看更加多

责任编辑:网友投稿

回复

使用道具 举报

0

主题

1万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-8-26 17:34:18 | 显示全部楼层
可以发布外链的网站 http://www.fok120.com/
回复

使用道具 举报

0

主题

1万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-9-7 08:32:23 | 显示全部楼层
谷歌网站排名优化 http://www.fok120.com/
回复

使用道具 举报

2930

主题

2万

回帖

9956万

积分

论坛元老

Rank: 8Rank: 8

积分
99569372
发表于 2024-10-9 13:02:42 | 显示全部楼层
在遇到你之前,我对人世间是否有真正的圣人是怀疑的。
回复

使用道具 举报

2995

主题

2万

回帖

9915万

积分

论坛元老

Rank: 8Rank: 8

积分
99159209
发表于 2024-10-13 12:11:35 | 显示全部楼层
论坛的成果是显著的,但我们不能因为成绩而沾沾自喜。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-6 11:02 , Processed in 0.636475 second(s), 39 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.