このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。
このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。
このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。
このドキュメントでは、PHPを動的ライブラリとしてロードするFrankenPHPバイナリの作成方法を説明します。 これが推奨される方法です。
または、完全静的およびほぼ静的なビルドも作成できます。
FrankenPHPはPHP 8.2以上と互換性があります。
FrankenPHPと互換性のあるlibphpのバージョンをインストールする最も簡単な方法は、Homebrew PHPが提供するZTSパッケージを使用することです。
まず、まだインストールしていない場合はHomebrewをインストールしてください。
次に、PHPのZTSバリアント、Brotli(オプション、圧縮サポート用)、watcher(オプション、ファイル変更検出用)をインストールします:
brew install shivammathur/php/php-zts brotli watcher
brew link --overwrite --force shivammathur/php/php-zts
別の方法として、FrankenPHPに必要なオプションを指定してPHPをソースからコンパイルすることもできます。
まず、PHPのソースを取得して展開します:
tar xf php-*
cd php-*/
次に、プラットフォームに応じて必要なオプションを指定してconfigure
スクリプトを実行します。
以下の./configure
フラグは必須ですが、例えば拡張機能モジュールや追加機能をコンパイルするために他のフラグを追加することもできます。
./configure \
--enable-embed \
--enable-zts \
--disable-zend-signals \
--enable-zend-max-execution-timers
Homebrewパッケージマネージャーを使用して、必須およびオプションの依存関係をインストールします:
brew install libiconv bison brotli re2c pkg-config watcher
echo 'export PATH="/opt/homebrew/opt/bison/bin:$PATH"' >> ~/.zshrc
その後、以下のようにconfigureスクリプトを実行します:
./configure \
--enable-embed \
--enable-zts \
--disable-zend-signals \
--with-iconv=/opt/homebrew/opt/libiconv/
最後に、PHPをコンパイルしてインストールします:
make -j"$(getconf _NPROCESSORS_ONLN)"
sudo make install
FrankenPHPの一部の機能は、システムにインストールされているオプションの依存パッケージに依存しています。 または、Goコンパイラにビルドタグを渡すことで、これらの機能を無効にできます。
機能 | 依存関係 | 無効にするためのビルドタグ |
---|---|---|
Brotli圧縮 | Brotli | nobrotli |
ファイル変更時のワーカー再起動 | Watcher C | nowatcher |
いよいよ最終的なバイナリをビルドできるようになりました。
推奨される方法は、xcaddyを使用してFrankenPHPをコンパイルする方法です。
xcaddy
を使うと、CaddyのカスタムモジュールやFrankenPHP拡張を簡単に追加できます:
CGO_ENABLED=1 \
XCADDY_GO_BUILD_FLAGS="-ldflags='-w -s' -tags=nobadger,nomysql,nopgx" \
CGO_CFLAGS=$(php-config --includes) \
CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" \
xcaddy build \
--output frankenphp \
--with github.com/dunglas/frankenphp/caddy \
--with github.com/dunglas/mercure/caddy \
--with github.com/dunglas/vulcain/caddy
# 追加のCaddyモジュールとFrankenPHP拡張をここに追加
Tip
musl libc(Alpine Linuxのデフォルト)とSymfonyを使用している場合、 デフォルトのスタックサイズを増やす必要がある場合があります。 そうしないと、
PHP Fatal error: Maximum call stack size of 83360 bytes reached during compilation. Try splitting expression
のようなエラーが発生する可能性があります。これを行うには、
XCADDY_GO_BUILD_FLAGS
環境変数をXCADDY_GO_BUILD_FLAGS=$'-ldflags "-w -s -extldflags \'-Wl,-z,stack-size=0x80000\'"'
のようなものに変更してください (アプリの要件に応じてスタックサイズの値を変更してください)。
代替として、xcaddy
を使わずにgo
コマンドを直接使ってFrankenPHPをコンパイルすることも可能です:
curl -L https://github.com/php/frankenphp/archive/refs/heads/main.tar.gz | tar xz
cd frankenphp-main/caddy/frankenphp
CGO_CFLAGS=$(php-config --includes) CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" go build -tags=nobadger,nomysql,nopgx