二进制打包

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

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

安装命令行工具

composer require webman/console

打包

运行命令

php webman build:bin

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

php webman build:bin 8.3

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

更新打包运行时

当前提供 PHP 8.2–8.5 的安全修复版本。为减少实际可执行文件体积,运行时不包含 intl/ICU,Linux 运行时使用 UPX 压缩。UPX 减小磁盘文件,运行内存不会随文件同比减少,启动时会有解压开销。

打包命令会复用 build 目录中的 micro.sfx 或 ZIP 缓存。更新 PHP 运行时后,请先删除对应版本的缓存,再重新打包,例如 PHP 8.3:

rm -f build/php8.3.micro.sfx build/php8.3.micro.sfx.zip
php webman build:bin 8.3

如果修改过 config/plugin/webman/console/app.php 的 build_dir,请清理该目录中的对应文件。已生成的 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.3,打包也用php8.3,避免出现兼容问题
  • 打包会下载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排除掉,避免打包后的文件过大
  • 二进制打包不支持使用swoole协程
  • 切勿将用户上传的文件存储在二进制包中,因为以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

支持的扩展

apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, event, exif, fileinfo, filter, ftp, gd, gmp, hash, iconv, imagick, imap, json, libxml, mbstring, mysqli, mysqlnd, openssl, pcntl, pcre, PDO, pdo_mysql, pgsql, Phar, posix, protobuf, readline, redis, Reflection, session, shmop, SimpleXML, soap, sockets, sodium, SPL, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tokenizer, xml, xmlreader, xmlwriter, xsl, Zend OPcache, zip, zlib

项目出处

https://github.com/crazywhalecc/static-php-cli
https://github.com/webman-php/static-php-cli-hosted

编辑于2026-10-23 14:20:05 完善本页 +发起讨论
赞助商