Skip to content

二进制打包

webman 支持将项目打包成一个二进制文件,这使得 webman 无需 php 环境也能在 linux 系统运行起来。

注意 打包后的文件目前只支持运行在 x86_64 架构的 linux 系统上,不支持 windows 和 mac 系统 需要关闭 php.ini 的 phar 配置选项,既设置 phar.readonly = 0

安装命令行工具

composer require webman/console ^1.2.24

打包

运行命令

php webman build:bin

同时可以指定以哪个 php 版本打包,例如

php webman build:bin 8.1

打包后会在 bulid 目录生成一个 webman.bin 文件

启动

将 webman.bin 上传至 linux 服务器,执行 ./webman.bin start./webman.bin start -d 即可启动。

原理

  • 首先将本地 webman 项目打包成一个 phar 文件
  • 然后远程下载 php8.x.micro.sfx 到本地
  • 将 php8.x.micro.sfx 和 phar 文件拼接为一个二进制文件

注意事项

  • 强烈建议本地 php 版本和打包版本一致,例如本地是 php8.1,打包也用 php8.1,避免出现兼容问题
  • 打包会下载 php8 的源码,但是并不会本地安装,不会影响本地 php 环境
  • webman.bin 目前只支持在 x86_64 架构的 linux 系统运行,不支持在 mac 系统运行
  • 打包后的项目不支持 reload,更新代码需要 restart 重启
  • 默认不打包 env 文件 ( config/plugin/webman/console/app.php 中 exclude_files 控制),所以启动时 env 文件应该放置与 webman.bin 相同目录下
  • 运行过程中会在 webman.bin 所在目录生成 runtime 目录,用于存放日志文件
  • 目前 webman.bin 不会读取外部 php.ini 文件,如需要自定义 php.ini,请在 /config/plugin/webman/console/app.php 文件 custom_ini 中设置
  • 有些文件不需要打包,可以设置 config/plugin/webman/console/app.php 排除掉,避免打包后的文件过大
  • 切勿将用户上传的文件存储在二进制包中,因为以 phar:// 协议操作用户上传的文件是非常危险的 (phar 反序列化漏洞)。用户上传的文件必须单独存储在包之外的磁盘中。
  • 如果你的业务需要上传文件到 public 目录,需要将 public 目录独立出来放在 webman.bin 所在目录,这时候需要配置 config/app.php 如下并重新打包。
'public_path' => base_path(false) . DIRECTORY_SEPARATOR . 'public',

单独下载静态 PHP

有时候你只是不想部署 PHP 环境,只需要一个 PHP 可执行文件,点击请点击这里下载静态 php 下载

提示 如需给静态 php 指定 php.ini 文件,请使用以下命令 php -c /your/path/php.ini start.php start -d

支持的扩展

Core, date, libxml, openssl, pcre, sqlite3, zlib, amqp, apcu, bcmath, calendar, ctype, curl, dba, dom, sockets, event, hash, fileinfo, filter, gd, gettext, json, iconv, SPL, session, standard, mbstring, igbinary, imagick, exif, mongodb, msgpack, mysqlnd, mysqli, pcntl, PDO, pdo_mysql, pdo_pgsql, pdo_sqlite, pdo_sqlsrv, pgsql, Phar, posix, readline, redis, Reflection, shmop, SimpleXML, soap, sodium, sqlsrv, sysvmsg, sysvsem, sysvshm, tokenizer, xlswriter, xml, xmlreader, xmlwriter, xsl, zip, memcache, Zend OPcache

项目出处

https://github.com/crazywhalecc/static-php-clihttps://github.com/walkor/static-php-cli

基于 MIT 许可发布