PHPmicro 自执行 SAPI 0.0.1-prealpha 版发布

栏目: 软件资讯 · 发布时间: 5年前

内容简介: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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Head First HTML and CSS

Head First HTML and CSS

Elisabeth Robson、Eric Freeman / O'Reilly Media / 2012-9-8 / USD 39.99

Tired of reading HTML books that only make sense after you're an expert? Then it's about time you picked up Head First HTML and really learned HTML. You want to learn HTML so you can finally create th......一起来看看 《Head First HTML and CSS》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具