当前位置: 首页 > 工具软件 > PHPMicro > 使用案例 >

php micro,PHPMicro

黄沈浪
2023-12-01

microphp 自执行 SAPI

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

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

兼容性

目前兼容 PHP7.4 与 8.0;兼容 Windows、Linux、macOS。

构建

准备源码

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

# 在php源码目录下

git clone sapi/micro

2.打patch

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

patch文件

平台/PHP版本

是否必须

作用

disable_huge_page.patch

Linux

可选

禁用linux构建的max-page-size选项,缩减sfx体积(典型的, 10M+ -> 5M)

vcruntime140_.patch

Windows

必选

禁用sfx启动时GetModuleHandle(vcruntime140(d).dll)

win32_.patch

Windows

必选

修改构建系统以静态构建

zend_stream.patch

Windows

必选

修改构建系统以静态构建

phar.patch

*

可选

实现phar的支持

并分别进行patch:

# 在php源码目录下

patch -p1 < sapi/micro/patches/

unix-like 构建

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

1.buildconf

# 在php源码目录下

./buildconf --force

2.configure

# 在php源码目录下

./configure

参考的选项:

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

3.make

# 在php源码目录下

make micro

(make all(或者make) 或许也可以,但建议还是只构建micro SAPI

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

Windows 构建

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

1.buildconf

# 在php源码目录下

buildconf

2.configure

# 在php源码目录下

configure

参考的选项:

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

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

# 在php源码目录下

nmake sfx

生成的文件在 \\micro.sfx

使用

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

例如:myawesomeapp.php内容为

echo "hello, this is my awesome app." . PHP_EOL;

linux下

cat /path/to/micro.sfx myawesomeapp.php > myawesomeapp

chmod 0755 ./myawesomeapp

./myawesomeapp

# 回显 "hello, this is my awesome app."

或者Windows下

COPY /b \path\to\micro.sfx + myawesomeapp.php myawesomeapp.exe

myawesomeapp.exe

REM 回显 "hello, this is my awesome app."

优化

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

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

例如

# ./buildconf things...

export CC=musl-gcc

export CXX=musl-gcc

# ./configure balabala

# make balabala

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

以libffi为例:

# 通过git获取源码

git clone https://github.com/libffi/libffi

cd libffi

git checkout

autoreconf -i

# 或者直接下载tarball解压

wget

tar xf

cd

# 如果使用musl的话

export CC=musl-gcc

export CXX=musl-gcc

# 构建安装

./configure --prefix=/my/prefered/path &&

make -j`nproc` &&

make install

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

# ./buildconf things...

# export CC=musl-xxx things...

export PKG_CONFIG_PATH=/my/prefered/path/lib/pkgconfig

# ./configure balabala

# make balabala

 类似资料:

相关阅读

相关文章

相关问答