Esta página ha sido traducida por la comunidad y puede no estar actualizada. Consulta la versión de referencia.

Esta página ha sido traducida por la comunidad y puede no estar actualizada. Consulta la versión de referencia.

Esta página ha sido traducida por la comunidad y puede no estar actualizada. Consulta la versión de referencia.

Funciona con
Compilar desde fuentes

Compilar desde fuentes

Este documento explica cómo crear un binario de FrankenPHP que cargará PHP como una biblioteca dinámica. Esta es la forma recomendada.

Alternativamente, también se pueden crear compilaciones estáticas y mayormente estáticas.

# Instalar PHP

FrankenPHP es compatible con PHP 8.2 y versiones superiores.

# Con Homebrew (Linux y Mac)

La forma más sencilla de instalar una versión de libphp compatible con FrankenPHP es usar los paquetes ZTS proporcionados por Homebrew PHP.

Primero, si no lo ha hecho ya, instale Homebrew.

Luego, instale la variante ZTS de PHP, Brotli (opcional, para soporte de compresión) y watcher (opcional, para detección de cambios en archivos):

brew install shivammathur/php/php-zts brotli watcher
brew link --overwrite --force shivammathur/php/php-zts

# Compilando PHP

Alternativamente, puede compilar PHP desde las fuentes con las opciones necesarias para FrankenPHP siguiendo estos pasos.

Primero, obtenga las fuentes de PHP y extráigalas:

tar xf php-*
cd php-*/

Luego, ejecute el script configure con las opciones necesarias para su plataforma. Las siguientes banderas de ./configure son obligatorias, pero puede agregar otras, por ejemplo, para compilar extensiones o características adicionales.

Linux

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

Mac

Use el gestor de paquetes Homebrew para instalar las dependencias requeridas y opcionales:

brew install libiconv bison brotli re2c pkg-config watcher
echo 'export PATH="/opt/homebrew/opt/bison/bin:$PATH"' >> ~/.zshrc

Luego ejecute el script de configuración:

./configure \
    --enable-embed \
    --enable-zts \
    --disable-zend-signals \
    --with-iconv=/opt/homebrew/opt/libiconv/

Compilar PHP

Finalmente, compile e instale PHP:

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

# Instalar dependencias opcionales

Algunas características de FrankenPHP dependen de dependencias opcionales del sistema que deben instalarse. Alternativamente, estas características pueden deshabilitarse pasando etiquetas de compilación al compilador Go.

CaracterísticaDependenciaEtiqueta de compilación para deshabilitarla
Compresión BrotliBrotlinobrotli
Reiniciar workers al cambiar archivosWatcher Cnowatcher
MercureBiblioteca Mercure Go (instalada automáticamente, licencia AGPL)nomercure

# Compilar la aplicación Go

Ahora puede construir el binario final.

# Usando xcaddy

La forma recomendada es usar xcaddy para compilar FrankenPHP. xcaddy también permite agregar fácilmente módulos personalizados de Caddy y extensiones de 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 \
    --with github.com/dunglas/caddy-cbrotli
    # Agregue módulos adicionales de Caddy y extensiones de FrankenPHP aquí
    # opcionalmente, si desea compilar desde sus fuentes de frankenphp:
    # --with github.com/dunglas/frankenphp=$(pwd) \
    # --with github.com/dunglas/frankenphp/caddy=$(pwd)/caddy

Tip

Si está usando musl libc (predeterminado en Alpine Linux) y Symfony, es posible que deba aumentar el tamaño de pila predeterminado. De lo contrario, podría obtener errores como PHP Fatal error: Maximum call stack size of 83360 bytes reached during compilation. Try splitting expression

Para hacerlo, cambie la variable de entorno XCADDY_GO_BUILD_FLAGS a algo como: XCADDY_GO_BUILD_FLAGS=$'-ldflags "-w -s -extldflags \'-Wl,-z,stack-size=0x80000\'"' (cambie el valor del tamaño de pila según las necesidades de su aplicación).

# Sin xcaddy

Alternativamente, es posible compilar FrankenPHP sin xcaddy usando directamente el comando go:

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
Editar esta página