Questo documento spiega come creare un binario FrankenPHP che caricherà PHP come libreria condivisa. Questo è il metodo consigliato.
In alternativa, è possibile creare anche build completamente e prevalentemente statiche.
FrankenPHP è compatibile con PHP 8.2 e versioni successive.
Il modo più semplice per installare una versione di libphp compatibile con FrankenPHP è utilizzare i pacchetti ZTS forniti da Homebrew PHP.
Innanzitutto, se non è già stato fatto, installare Homebrew.
Quindi, installa la variante ZTS di PHP, Brotli (opzionale, per il supporto della compressione) e watcher (opzionale, per il rilevamento delle modifiche ai file):
brew install shivammathur/php/php-zts brotli watcher
brew link --overwrite --force shivammathur/php/php-ztsIn alternativa, si può compilare PHP dai sorgenti con le opzioni necessarie a FrankenPHP, seguendo questi passaggi.
Per prima cosa, recuperare i sorgenti PHP ed estrarli:
tar xf php-*
cd php-*/Quindi, eseguire lo script configure con le opzioni necessarie per la propria piattaforma.
I seguenti flag ./configure sono obbligatori, ma se ne possono aggiungerne altri, ad esempio, per compilare estensioni o funzionalità aggiuntive.
./configure \
--enable-embed \
--enable-zts \
--disable-zend-signals \
--enable-zend-max-execution-timersUtilizzare il gestore pacchetti Homebrew per installare le dipendenze obbligatorie e facoltative:
brew install libiconv bison brotli re2c pkg-config watcher
echo 'export PATH="/opt/homebrew/opt/bison/bin:$PATH"' >> ~/.zshrcQuindi eseguire lo script di configurazione:
./configure \
--enable-embed \
--enable-zts \
--disable-zend-signals \
--with-iconv=/opt/homebrew/opt/libiconv/Infine, compilare e installare PHP:
make -j"$(getconf _NPROCESSORS_ONLN)"
sudo make installAlcune funzionalità di FrankenPHP dipendono da dipendenze di sistema opzionali che devono essere installate. In alternativa, queste funzionalità possono essere disabilitate passando i tag di build al compilatore Go.
| Caratteristica | Dipendenza | Crea tag per disabilitarlo |
|---|---|---|
| Compressione Brotli | Brotli | nobrotli |
| Riavvia i worker alla modifica del file | Osservatore C | nowatcher |
| Mercure | Libreria Mercure Go (installata automaticamente, licenza AGPL) | nomercure |
Ora si può creare il file binario finale.
Il modo consigliato è utilizzare xcaddy per compilare FrankenPHP.
xcaddy consente inoltre di aggiungere facilmente moduli Caddy personalizzati ed estensioni 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
# Aggiungere qui moduli Caddy ed estensioni FrankenPHP aggiuntivi
# facoltativo: se si vuole compilare dai propri sorgenti frankenphp:
# --with github.com/dunglas/frankenphp=$(pwd) \
# --with github.com/dunglas/frankenphp/caddy=$(pwd)/caddy
Tip
Se stai usando musl libc (il valore predefinito su Alpine Linux) e Symfony,
potrebbe essere necessario aumentare la dimensione dello stack predefinita.
Altrimenti potresti ricevere errori come PHP Fatal error: Maximum call stack size of 83360 bytes reached during compilation. Try splitting expression
Per fare ciò, cambiare la variabile d'ambiente XCADDY_GO_BUILD_FLAGS in qualcosa di simile
XCADDY_GO_BUILD_FLAGS=$'-ldflags "-w -s -extldflags \'-Wl,-z,stack-size=0x80000\'"'
(modificare il valore della dimensione dello stack in base alle esigenze dell'app).
In alternativa, è possibile compilare FrankenPHP senza xcaddy utilizzando direttamente il 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