webman打包成二进制,也就是将webman项目代码与PHP环境打包成一个二进制文件,无需部署php环境,也可以让webman在linux系统里运行起来。
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社区做出的贡献
越来越好!
文档终于出来了
大赞
⭐Star
牛逼PLUS++
千呼万唤始出来 ,
建议加个选项:打包后是否自动删除phar 以及 打包前把 bin 给删除一下
是不是这样可以实现给php代码加密了
代码加密和打包二进制是2个不同的概念
@evilk 是不是意味着二进制文件包还是可以解压出源代码
打包二进制只是把
php code
或者phar
文件内容追加到mirco
末尾,可以提取出来的。可以分离出来的,看似二进制,实则 = phar = 源代码 ,并不能有任何的加密保护作用。
要是PHP可以编译后 无法逆向出源码就好了 就像GO 一样
用什么工具可以获取到源码
哈哈哈 又增加了个厉害工具
也就是说,可以在win环境下打包?
可以在任何系统打包,只是运行暂时只能在linux下运行
git上自己看 windows max linux 都可以打包,
自己编译的php扩展是不是只能phar打包了
如果想加入其他扩展,可以参考
https://github.com/walkor/static-php-cli
自己编译一下mirco
文件,然后先打包成phar
,再拼接成一个二进制文件即可打包好之后怎么使用nginx代理呢
把静态资源放到和二进制文件同级目录就行了
各位注意下,如果环境是用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...
你配置忘记改了吧 php.ini 把phar.readonly=Off加 文档写了的
不修改配置文件就运行这个命令打包:php -d phar.readonly=0 ./webman build:bin
感谢,可以指定配置文件 php -c /path/to/your/php.ini start.php start
请问执行在Arm架构的代码是不是只能在Arm架构环境下打包?
还是说,在x86环境下打包,在Arm环境下也能执行?
文档说可以在任何环境打包,但是打包后的职能在linux x86下运行
二进制页面有docker 或者 git上面有 linux arm windows 各种环境都可以打包运行,只是webman 没有做兼容适配,你可以自己打包,或者你也可以使用 swoole-cli 的 docker 修改以下就行了,任何系统环境都可以跑
二进制打包发布到Linux系统运行报错,不知道哪里出错了,希望各个大佬帮忙看看
|---webman.bin
|---public
|---runtime
直接飞起
从你这个截图来看,你这个貌似打包没成功吧,二进制代码没有和源代码拼接到一起,
我的疑问是,当业务的代码发生变化后,重新打包应该如何平滑的更新?是直接把老版本的覆盖掉然后 执行restart命令?还是先把服务停掉然后再上传覆盖掉老文件,然后再用start启动一遍呢?这样的话,在上传和覆盖这个时间段服务器就无法服务了。
我是定义了一个 初始化进程,启动后 curl 链接远程判断:发现新版本1.2 是否更新(y/n)
按y 就下载二进制包覆盖并 kill webman 进程并重新启动webman (脚本操作)
你的初始化的进程是一个shell脚本吗?还是webman里的自定义进程
start.php 里面直接写代码就行了
你的脚本中是先下载覆盖掉文件然后再kill webman 然后再重启,是这样的顺序吗?
是的
静态php是不是只能在linux运行啊
giuthub上 已经有arm ,macos,windows 的sfx了 ,下载覆盖到build 里面的 sfx文件就行了 全平台支持
支持win的giuthub地址是?
添加php配置项,请参考:https://github.com/easysoft/phpmicro/wiki/INI-settings 或者是,可以修改vendor/webman/console/src/Commands/BuildBinCommand.php文件,用于自动生成类似ini.bin文件。
上传成功后,在文件目录执行 ./webman.bin start
提示 bash: webman.bin : commsnf not found
牛鼻啊
如何添加一个sodium扩展?
项目比较大,二进制打包后超过128M了咋整。启动直接报错: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 138781738 bytes) in Unknown on line 0
更改PHP 运行内存大小限制就可以了
改了memory_limit=-1,错误依然
functions.php 首行加入 ini_set('memory_limit', '512M');
请问你解决了吗?我也遇到这个问题
越来越高级了,越来越强大了,越来越好了,越来越喜欢了......
有一个疑问,webman打包二进制运行,从远程下载的micro.sfx是怎么做到与项目文件结合后运行,PHP_SAPI等于cli的;我自己打包出的micro.sfx的PHP_SAPI的值等于micro。
同问, 包括下载的也是micro,运行报错:只能在cli模式下运行
不是要将他们拼在一起吗?cat micro.sfx code.php > single-app && chmod +x single-app
./single-app
如果打包 PHAR 文件,仅需把 code.php 更换为 phar 文件路径即可
这个解决了, 询问了crazywhalecc大佬,在编译的时候加上
--with-micro-fake-cli
参数,编译后的micro.sfx 就可以正常运行webman了好的,感谢回复
太牛逼了
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'); 依然不行~
https://www.workerman.net/q/11438
打包还是不行呢
大爱老大!😚😚😚