バイナリパッケージ

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