二進位打包
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
打包後會在 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
排除掉,以避免打包後的檔案過大。 - 二進位打包不支援使用 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