二進制打包

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.1

打包後會在 build 目錄生成一個 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 排除掉,避免打包後的文件過大。
  • 二進制打包不支援使用 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

支援的擴展

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-cli
https://github.com/walkor/static-php-cli