🚀 将webman打包成二进制,PHP也可以打包成二进制了

walkor

webman打包成二进制,也就是将webman项目代码与PHP环境打包成一个二进制文件,无需部署php环境,也可以让webman在linux系统里运行起来。

安装 webman/console

composer require webman/console ^1.2.24

执行打包

php webman build:bin

运行

将生成的build/webman.bin 拷贝到linux系统,执行

./webman.bin start

更多webman打包二进制说明参考 webman手册打包成二进制

其它资源

如果只是下载可独立运行的PHP文件,参见 下载静态PHP

项目来源

https://github.com/crazywhalecc/static-php-cli
https://github.com/dixyes/phpmicro
https://github.com/easysoft/phpmicro
https://github.com/walkor/static-php-cli

感谢 easysoft dixyes crazywhalecc 为php社区做出的贡献

13289 25 22
25个回答

稚出

越来越好!

  • 暂无评论
evilk

文档终于出来了
大赞

  • 暂无评论
wolfcode

⭐Star

  • 暂无评论
鲁达

牛逼PLUS++

  • 暂无评论
kspade

千呼万唤始出来 ,
建议加个选项:打包后是否自动删除phar 以及 打包前把 bin 给删除一下

  • 暂无评论
liqianmo

是不是这样可以实现给php代码加密了

  • evilk 2023-02-23

    代码加密和打包二进制是2个不同的概念

  • liqianmo 2023-02-23

    @evilk 是不是意味着二进制文件包还是可以解压出源代码

  • 北月 2023-02-23

    打包二进制只是把 php code 或者 phar 文件内容追加到 mirco 末尾,可以提取出来的。

  • kspade 2023-02-23

    可以分离出来的,看似二进制,实则 = phar = 源代码 ,并不能有任何的加密保护作用。
    要是PHP可以编译后 无法逆向出源码就好了 就像GO 一样

  • tl54577 2023-08-04

    用什么工具可以获取到源码

jacknum1

哈哈哈 又增加了个厉害工具

  • 暂无评论
roczyl

也就是说,可以在win环境下打包?

  • luohonen 2023-02-24

    可以在任何系统打包,只是运行暂时只能在linux下运行

  • kspade 2023-02-24

    git上自己看 windows max linux 都可以打包,

mosquito

自己编译的php扩展是不是只能phar打包了

  • 北月 2023-02-24

    如果想加入其他扩展,可以参考 https://github.com/walkor/static-php-cli 自己编译一下 mirco 文件,然后先打包成 phar ,再拼接成一个二进制文件即可

稚出

打包好之后怎么使用nginx代理呢

sunwenzheng

各位注意下,如果环境是用webman的二进制php运行的话,打包的时候会这样

lighthouse@VM-4-7-debian:~/project/webman/webman$ php webman build:bin

In BuildPharCommand.php line 142:

The 'phar.readonly' is 'On', build phar must setting it 'Off' or exec with 'php -d phar.readon
ly=0 ./webman build:bin'

build:bin [<version>]

lighthouse@VM-4-7-debian:~/project/webman/webman$ php -d phar.readonly=0 ./webman build:bin
Phar packing...

  • jediking 2023-03-02

    你配置忘记改了吧 php.ini 把phar.readonly=Off加 文档写了的

  • kspade 2023-03-10

    不修改配置文件就运行这个命令打包:php -d phar.readonly=0 ./webman build:bin

  • sunwenzheng 2023-05-08

    感谢,可以指定配置文件 php -c /path/to/your/php.ini start.php start

风中的蒲公英

请问执行在Arm架构的代码是不是只能在Arm架构环境下打包?
还是说,在x86环境下打包,在Arm环境下也能执行?

  • damao 2023-03-14

    文档说可以在任何环境打包,但是打包后的职能在linux x86下运行

  • kspade 2023-03-14

    二进制页面有docker 或者 git上面有 linux arm windows 各种环境都可以打包运行,只是webman 没有做兼容适配,你可以自己打包,或者你也可以使用 swoole-cli 的 docker 修改以下就行了,任何系统环境都可以跑

jacknum1

二进制打包发布到Linux系统运行报错,不知道哪里出错了,希望各个大佬帮忙看看

  • 目录路径:project/webman.bin
  • 目录结构:|--project
    |---webman.bin
    |---public
    |---runtime
  • 启动命令: ./webman.bin start
  • 报错截图如下:
    截图
  • talentstone 2023-03-20

    直接飞起

  • songshu 2023-11-29

    从你这个截图来看,你这个貌似打包没成功吧,二进制代码没有和源代码拼接到一起,

euii

我的疑问是,当业务的代码发生变化后,重新打包应该如何平滑的更新?是直接把老版本的覆盖掉然后 执行restart命令?还是先把服务停掉然后再上传覆盖掉老文件,然后再用start启动一遍呢?这样的话,在上传和覆盖这个时间段服务器就无法服务了。

  • kspade 2023-03-21

    我是定义了一个 初始化进程,启动后 curl 链接远程判断:发现新版本1.2 是否更新(y/n)
    按y 就下载二进制包覆盖并 kill webman 进程并重新启动webman (脚本操作)

  • euii 2023-03-22

    你的初始化的进程是一个shell脚本吗?还是webman里的自定义进程

  • kspade 2023-03-22

    start.php 里面直接写代码就行了

  • euii 2023-03-24

    你的脚本中是先下载覆盖掉文件然后再kill webman 然后再重启,是这样的顺序吗?

  • kspade 2023-03-24

    是的

ieras

静态php是不是只能在linux运行啊

  • kspade 2023-03-21

    giuthub上 已经有arm ,macos,windows 的sfx了 ,下载覆盖到build 里面的 sfx文件就行了 全平台支持

  • roczyl 2023-05-08

    支持win的giuthub地址是?

宋可敬

添加php配置项,请参考:https://github.com/easysoft/phpmicro/wiki/INI-settings 或者是,可以修改vendor/webman/console/src/Commands/BuildBinCommand.php文件,用于自动生成类似ini.bin文件。

 // 生成二进制文件
file_put_contents($binFile, file_get_contents($sfxFile));
file_put_contents($binFile, file_get_contents("$this->buildDir/ini_header.bin"), FILE_APPEND);
file_put_contents($binFile, file_get_contents($pharFile), FILE_APPEND);
  • 暂无评论
嗷嗷叫唤

上传成功后,在文件目录执行 ./webman.bin start

提示 bash: webman.bin : commsnf not found

  • 暂无评论
wekyun

牛鼻啊

  • 暂无评论
ziyoren

如何添加一个sodium扩展?

  • 暂无评论
luscio

项目比较大,二进制打包后超过128M了咋整。启动直接报错: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 138781738 bytes) in Unknown on line 0

  • talentstone 2023-07-10

    更改PHP 运行内存大小限制就可以了

  • lianback 2023-08-10

    改了memory_limit=-1,错误依然

  • tl54577 2023-08-25

    functions.php 首行加入 ini_set('memory_limit', '512M');

  • miles 2023-10-28

    请问你解决了吗?我也遇到这个问题

W

越来越高级了,越来越强大了,越来越好了,越来越喜欢了......

  • 暂无评论
touer

有一个疑问,webman打包二进制运行,从远程下载的micro.sfx是怎么做到与项目文件结合后运行,PHP_SAPI等于cli的;我自己打包出的micro.sfx的PHP_SAPI的值等于micro。

  • csnow 2023-08-24

    同问, 包括下载的也是micro,运行报错:只能在cli模式下运行

  • euii 2023-08-24

    不是要将他们拼在一起吗?cat micro.sfx code.php > single-app && chmod +x single-app
    ./single-app

    如果打包 PHAR 文件,仅需把 code.php 更换为 phar 文件路径即可

  • csnow 2023-08-24

    这个解决了, 询问了crazywhalecc大佬,在编译的时候加上--with-micro-fake-cli 参数,编译后的micro.sfx 就可以正常运行webman了

  • touer 2023-08-25

    好的,感谢回复

wocall

太牛逼了

  • 暂无评论
miles

atal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 271495987 bytes) in Unknown on line 0
functions.php首行加入 ini_set('memory_limit', '-1'); 依然不行~

holly188

大爱老大!😚😚😚

  • 暂无评论
年代过于久远,无法发表回答
🔝