micro自执行SAPI提供了php“自执行文件”的可能性
你只需要将构建的micro.sfx文件与任意php文件或者phar包拼接(cat或者copy/b)为一个文件就可以直接执行这个php文件
兼容性目前兼容PHP7.4与8.0;兼容Windows、Linux、macOS。
构建准备源码1.将本仓库clone到php源码的sapi/micro下
#在php源码目录下gitclone<urlforthisrepo>sapi/micro2.打patch
patch文件在patches目录下,选择patch文件:
patch文件平台/PHP版本是否必须作用disable_huge_page.patchLinux可选禁用linux构建的max-page-size选项,缩减sfx体积(典型的,10M+->5M)vcruntime140_<phpversion>.patchWindows必选禁用sfx启动时GetModuleHandle(vcruntime140(d).dll)win32_<phpversion>.patchWindows必选修改构建系统以静态构建zend_stream.patchWindows必选修改构建系统以静态构建phar.patch*可选实现phar的支持并分别进行patch:
#在php源码目录下patch-p1<sapi/micro/patches/<nameofpatch>unix-like构建0.参考官方构建说明准备PHP构建环境
1.buildconf
#在php源码目录下./buildconf--force2.configure
#在php源码目录下./configure<options>参考的选项:
--disable-phpdbg--disable-cgi--disable-cli--disable-all--enable-micro--enable-phar--with-ffi--enable-zlib
3.make
#在php源码目录下makemicro(makeall(或者make)或许也可以,但建议还是只构建microSAPI
生成的文件在sapi/micro/micro.sfx
Windows构建0.参考官方构建说明准备PHP构建环境
1.buildconf
#在php源码目录下buildconf2.configure
#在php源码目录下configure<options>参考的选项:
--disable-all--disable-zts--enable-micro--enable-phar--with-ffi--enable-zlib
3.make由于构建系统的实现问题,Windows下不能使用nmake命令直接构建,使用nmakesfx来构建
#在php源码目录下nmakesfx生成的文件在<架构名>\<配置名>\micro.sfx
使用将micro.sfx和php文件拼接即可
例如:myawesomeapp.php内容为
<?phpecho"hello,thisismyawesomeapp.".PHP_EOL;linux下
cat/path/to/micro.sfxmyawesomeapp.php>myawesomeappchmod0755./myawesomeapp./myawesomeapp#回显"hello,thisismyawesomeapp."或者Windows下
COPY/b\path\to\micro.sfx+myawesomeapp.phpmyawesomeapp.exemyawesomeapp.exeREM回显"hello,thisismyawesomeapp."优化linux下php对于hugepages优化导致了生成的文件很大,如果不考虑对hugepages的优化,使用disable_huge_page.patch来来减小文件尺寸
linux下静态构建需要包含c标准库,常见的glibc较大,推荐使用musl,手动安装的musl或者某些发行版会提供gcc(或clang)的muslwrapper:musl-gcc或者musl-clang。在进行configure之前,通过指定CC和CXX变量来使用这些wrapper
例如
#./buildconfthings...exportCC=musl-gccexportCXX=musl-gcc#./configurebalabala#makebalabalalinux下构建时一般希望是纯静态的,但构建使用的发行版不一定提供依赖的库(zliblibffi等)的静态库版本,这时考虑自行构建依赖库
以libffi为例:
#通过git获取源码gitclonehttps://github.com/libffi/libfficdlibffigitcheckout<versionyoulike,v3.3forexample>autoreconf-i#或者直接下载tarball解压wget<url>tarxf<tarname>cd<extractedname>#如果使用musl的话exportCC=musl-gccexportCXX=musl-gcc#构建安装./configure--prefix=/my/prefered/path&&make-j`nproc`&&makeinstall然后使用以下export命令来构建micro:
#./buildconfthings...#exportCC=musl-xxxthings...exportPKG_CONFIG_PATH=/my/prefered/path/lib/pkgconfig#./configurebalabala#makebalabala
评论