PHPMicro micro 自执行 SAPI开源项目

我要开发同款
匿名用户2021年01月04日
92阅读

技术信息

开源地址
https://gitee.com/longzhiyan/phpmicro
授权协议
Apache

作品详情

microphp自执行SAPI

micro自执行SAPI提供了php“自执行文件”的可能性

你只需要将构建的micro.sfx文件与任意php文件或者phar包拼接(cat或者copy/b)为一个文件就可以直接执行这个php文件

兼容性

目前兼容PHP7.4与8.0;兼容Widows、Liux、macOS。

构建准备源码

1.将本仓库cloe到php源码的sapi/micro下

#在php源码目录下gitcloe<urlforthisrepo>sapi/micro

2.打patch

patch文件在patches目录下,选择patch文件:

patch文件平台/PHP版本是否必须作用disable_huge_page.patchLiux可选禁用liux构建的max-page-size选项,缩减sfx体积(典型的,10M+->5M)vcrutime140_<phpversio>.patchWidows必选禁用sfx启动时GetModuleHadle(vcrutime140(d).dll)wi32_<phpversio>.patchWidows必选修改构建系统以静态构建zed_stream.patchWidows必选修改构建系统以静态构建phar.patch*可选实现phar的支持

并分别进行patch:

#在php源码目录下patch-p1<sapi/micro/patches/<ameofpatch>uix-like构建

0.参考官方构建说明准备PHP构建环境

1.buildcof

#在php源码目录下./buildcof--force

2.cofigure

#在php源码目录下./cofigure<optios>

参考的选项:

--disable-phpdbg--disable-cgi--disable-cli--disable-all--eable-micro--eable-phar--with-ffi--eable-zlib

3.make

#在php源码目录下makemicro

(makeall(或者make)或许也可以,但建议还是只构建microSAPI

生成的文件在sapi/micro/micro.sfx

Widows构建

0.参考官方构建说明准备PHP构建环境

1.buildcof

#在php源码目录下buildcof

2.cofigure

#在php源码目录下cofigure<optios>

参考的选项:

--disable-all--disable-zts--eable-micro--eable-phar--with-ffi--eable-zlib

3.make由于构建系统的实现问题,Widows下不能使用make命令直接构建,使用makesfx来构建

#在php源码目录下makesfx

生成的文件在<架构名>\<配置名>\micro.sfx

使用

将micro.sfx和php文件拼接即可

例如:myawesomeapp.php内容为

<?phpecho"hello,thisismyawesomeapp.".PHP_EOL;

liux下

cat/path/to/micro.sfxmyawesomeapp.php>myawesomeappchmod0755./myawesomeapp./myawesomeapp#回显"hello,thisismyawesomeapp."

或者Widows下

COPY/b\path\to\micro.sfx+myawesomeapp.phpmyawesomeapp.exemyawesomeapp.exeREM回显"hello,thisismyawesomeapp."优化

liux下php对于hugepages优化导致了生成的文件很大,如果不考虑对hugepages的优化,使用disable_huge_page.patch来来减小文件尺寸

liux下静态构建需要包含c标准库,常见的glibc较大,推荐使用musl,手动安装的musl或者某些发行版会提供gcc(或clag)的muslwrapper:musl-gcc或者musl-clag。在进行cofigure之前,通过指定CC和CXX变量来使用这些wrapper

例如

#./buildcofthigs...exportCC=musl-gccexportCXX=musl-gcc#./cofigurebalabala#makebalabala

liux下构建时一般希望是纯静态的,但构建使用的发行版不一定提供依赖的库(zliblibffi等)的静态库版本,这时考虑自行构建依赖库

以libffi为例:

#通过git获取源码gitcloehttps://github.com/libffi/libfficdlibffigitcheckout<versioyoulike,v3.3forexample>autorecof-i#或者直接下载tarball解压wget<url>tarxf<tarame>cd<extractedame>#如果使用musl的话exportCC=musl-gccexportCXX=musl-gcc#构建安装./cofigure--prefix=/my/prefered/path&&make-j`proc`&&makeistall

然后使用以下export命令来构建micro:

#./buildcofthigs...#exportCC=musl-xxxthigs...exportPKG_CONFIG_PATH=/my/prefered/path/lib/pkgcofig#./cofigurebalabala#makebalabala

功能介绍

microphp 自执行 SAPI micro 自执行 SAPI 提供了 php“自执行文件”的可能性 你只需要将构建的 micro.sfx 文件与任意 php 文件或者 phar 包拼接(ca...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论