内容简介:micro自执行SAPI提供了php“自执行文件”的可能性。你只需要将构建的micro.sfx文件与任意php文件或者phar包拼接(cat或者copy /b)为一个文件就可以直接执行这个php文件。 兼容性 目前兼容PHP7.4与8.0;兼容Windo...
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_<php version>.patch | Windows | 必选 | 禁用sfx启动时GetModuleHandle(vcruntime140(d).dll) |
win32_<php version>.patch | Windows | 必选 | 修改构建系统以静态构建 |
zend_stream.patch | Windows | 必选 | 修改构建系统以静态构建 |
phar.patch | * | 可选 | 实现phar的支持 |
并分别进行patch:
# 在php源码目录下 patch -p1 < sapi/micro/patches/
unix-like 构建
1.参考官方构建说明准备PHP构建环境
2.buildconf
# 在php源码目录下 ./buildconf --force
3.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 构建
1.参考官方构建说明准备PHP构建环境
2.buildconf
# 在php源码目录下 buildconf
3.configure
# 在php源码目录下 configure
参考的选项:
--disable-all --disable-zts --enable-micro --enable-phar --with-ffi --enable-zlib
4.make 由于构建系统的实现问题, Windows下不能使用nmake命令直接构建,使用nmake sfx来构建
# 在php源码目录下 nmake sfx
生成的文件在 <架构名>\<配置名>\micro.sfx
使用将micro.sfx和php文件拼接即可
例如:myawesomeapp.php内容为
<?php echo "hello, this is my awesome app. "PHP_EOL";
或者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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- HHVM 3.23 发布,高速的 PHP 执行引擎
- HHVM 3.23.3 发布,高速的 PHP 执行引擎
- GitLab 12.1 发布,合并 Trains 的并行执行策略
- HHVM 3.26.1 发布,执行 PHP 代码的虚拟机
- 7 月 Android 安全补丁发布,修复远程代码执行漏洞
- Ray 0.6.1 发布,高性能分布式执行框架
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
网络江湖三十六计
程苓峰,王晶 / 经济日报出版社 / 2009-6 / 40.00元
《网络江湖三十六计》内容简介:貌合神离:卖个破绽给对手,让他尝到甜头,自认为可安枕无忧,往往就松懈大意。于是,自己蓄力并反击的机会就来了。诱敌就是“貌合”,暗地发力就是“神离”。一起来看看 《网络江湖三十六计》 这本书的介绍吧!