Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Эта страница была переведена сообществом и не обязательно является актуальной. Обратитесь к справочной версии.
Этот документ объясняет, как создать бинарный файл FrankenPHP, который будет загружать PHP как динамическую библиотеку.
Это рекомендуемый способ.
Альтернативно можно создать статическую сборку.
FrankenPHP совместим с PHP версии 8.2 и выше.
Сначала загрузите исходники PHP и распакуйте их:
tar xf php-*
cd php-*/
Далее выполните скрипт configure
с параметрами, необходимыми для вашей платформы.
Следующие флаги ./configure
обязательны, но вы можете добавить и другие, например, для компиляции расширений или дополнительных функций.
./configure \
--enable-embed \
--enable-zts \
--disable-zend-signals \
--enable-zend-max-execution-timers
Используйте пакетный менеджер Homebrew для установки
libiconv
, bison
, re2c
и pkg-config
:
brew install libiconv bison brotli re2c pkg-config
echo 'export PATH="/opt/homebrew/opt/bison/bin:$PATH"' >> ~/.zshrc
Затем выполните скрипт configure:
./configure \
--enable-embed=static \
--enable-zts \
--disable-zend-signals \
--disable-opcache-jit \
--enable-static \
--enable-shared=no \
--with-iconv=/opt/homebrew/opt/libiconv/
Наконец, скомпилируйте и установите PHP:
make -j"$(getconf _NPROCESSORS_ONLN)"
sudo make install
Некоторые функции FrankenPHP зависят от опциональных системных зависимостей.
Альтернативно, эти функции можно отключить, передав соответствующие теги сборки компилятору Go.
Функция | Зависимость | Тег сборки для отключения |
---|---|---|
Сжатие Brotli | Brotli | nobrotli |
Перезапуск worker-скриптов при изменении файлов | Watcher C | nowatcher |
Теперь можно собрать итоговый бинарный файл:
curl -L https://github.com/dunglas/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
Альтернативно, используйте xcaddy для компиляции FrankenPHP с пользовательскими модулями Caddy:
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 здесь
Редактировать эту страницу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\'"'
(измените значение размера стека в зависимости от требований вашего приложения).