このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。

このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。

このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。

提供
ソースからのコンパイル

ソースからのコンパイル

このドキュメントでは、PHPを動的ライブラリとしてロードするFrankenPHPバイナリの作成方法を説明します。 これが推奨される方法です。

または、完全静的およびほぼ静的なビルドも作成できます。

# PHPのインストール

FrankenPHPはPHP 8.2以上と互換性があります。

# Homebrewを使用する場合(LinuxとMac)

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

# PHPをコンパイルする場合

別の方法として、FrankenPHPに必要なオプションを指定してPHPをソースからコンパイルすることもできます。

まず、PHPのソースを取得して展開します:

tar xf php-*
cd php-*/

次に、プラットフォームに応じて必要なオプションを指定してconfigureスクリプトを実行します。 以下の./configureフラグは必須ですが、例えば拡張機能モジュールや追加機能をコンパイルするために他のフラグを追加することもできます。

Linux

./configure \
    --enable-embed \
    --enable-zts \
    --disable-zend-signals \
    --enable-zend-max-execution-timers

Mac

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のコンパイル

最後に、PHPをコンパイルしてインストールします:

make -j"$(getconf _NPROCESSORS_ONLN)"
sudo make install

# オプション依存関係のインストール

FrankenPHPの一部の機能は、システムにインストールされているオプションの依存パッケージに依存しています。 または、Goコンパイラにビルドタグを渡すことで、これらの機能を無効にできます。

機能依存関係無効にするためのビルドタグ
Brotli圧縮Brotlinobrotli
ファイル変更時のワーカー再起動Watcher Cnowatcher

# Goアプリのコンパイル

いよいよ最終的なバイナリをビルドできるようになりました。

# xcaddyを使う場合

推奨される方法は、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を使用しない場合

代替として、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
このページを編集