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
Contribuir

Contribuir

# Compilar PHP

# Con Docker (Linux)

Construya la imagen Docker de desarrollo:

docker build -t frankenphp-dev -f dev.Dockerfile .
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -p 8080:8080 -p 443:443 -p 443:443/udp -v $PWD:/go/src/app -it frankenphp-dev

La imagen contiene las herramientas de desarrollo habituales (Go, GDB, Valgrind, Neovim…) y utiliza las siguientes ubicaciones de configuración de PHP:

  • php.ini: /etc/frankenphp/php.ini Se proporciona un archivo php.ini con ajustes preestablecidos de desarrollo por defecto.
  • archivos de configuración adicionales: /etc/frankenphp/php.d/*.ini
  • extensiones php: /usr/lib/frankenphp/modules/

Si su versión de Docker es inferior a 23.0, la construcción fallará debido a un problema de patrón en .dockerignore. Agregue los directorios a .dockerignore:

 !testdata/*.php
 !testdata/*.txt
+!caddy
+!internal

# Sin Docker (Linux y macOS)

Siga las instrucciones para compilar desde las fuentes y pase la bandera de configuración --debug.

# Ejecutar la suite de pruebas

go test -tags watcher -race -v ./...

# Módulo Caddy

Construir Caddy con el módulo FrankenPHP:

cd caddy/frankenphp/
go build -tags watcher,brotli,nobadger,nomysql,nopgx
cd ../../

Ejecutar Caddy con el módulo FrankenPHP:

cd testdata/
../caddy/frankenphp/frankenphp run

El servidor está configurado para escuchar en la dirección 127.0.0.1:80:

Note

Si está usando Docker, deberá enlazar el puerto 80 del contenedor o ejecutar desde dentro del contenedor.

curl -vk http://127.0.0.1/phpinfo.php

# Servidor de prueba mínimo

Construir el servidor de prueba mínimo:

cd internal/testserver/
go build
cd ../../

Iniciar el servidor de prueba:

cd testdata/
../internal/testserver/testserver

El servidor está configurado para escuchar en la dirección 127.0.0.1:8080:

curl -v http://127.0.0.1:8080/phpinfo.php

# Construir localmente las imágenes Docker

Mostrar el plan de compilación:

docker buildx bake -f docker-bake.hcl --print

Construir localmente las imágenes FrankenPHP para amd64:

docker buildx bake -f docker-bake.hcl --pull --load --set "*.platform=linux/amd64"

Construir localmente las imágenes FrankenPHP para arm64:

docker buildx bake -f docker-bake.hcl --pull --load --set "*.platform=linux/arm64"

Construir desde cero las imágenes FrankenPHP para arm64 y amd64 y subirlas a Docker Hub:

docker buildx bake -f docker-bake.hcl --pull --no-cache --push

# Depurar errores de segmentación con las compilaciones estáticas

  1. Descargue la versión de depuración del binario FrankenPHP desde GitHub o cree su propia compilación estática incluyendo símbolos de depuración:

    docker buildx bake \
        --load \
        --set static-builder.args.DEBUG_SYMBOLS=1 \
        --set "static-builder.platform=linux/amd64" \
        static-builder
    docker cp $(docker create --name static-builder-musl dunglas/frankenphp:static-builder-musl):/go/src/app/dist/frankenphp-linux-$(uname -m) frankenphp
    
  2. Reemplace su versión actual de frankenphp por el ejecutable de depuración de FrankenPHP.

  3. Inicie FrankenPHP como de costumbre (alternativamente, puede iniciar FrankenPHP directamente con GDB: gdb --args frankenphp run).

  4. Adjunte el proceso con GDB:

    gdb -p `pidof frankenphp`
    
  5. Si es necesario, escriba continue en el shell de GDB.

  6. Haga que FrankenPHP falle.

  7. Escriba bt en el shell de GDB.

  8. Copie la salida.

# Depurar errores de segmentación en GitHub Actions

  1. Abrir .github/workflows/tests.yml

  2. Activar los símbolos de depuración de la biblioteca PHP:

        - uses: shivammathur/setup-php@v2
          # ...
          env:
            phpts: ts
    +       debug: true
    
  3. Activar tmate para conectarse al contenedor:

        - name: Set CGO flags
          run: echo "CGO_CFLAGS=$(php-config --includes)" >> "$GITHUB_ENV"
    +   - run: |
    +       sudo apt install gdb
    +       mkdir -p /home/runner/.config/gdb/
    +       printf "set auto-load safe-path /\nhandle SIG34 nostop noprint pass" > /home/runner/.config/gdb/gdbinit
    +   - uses: mxschmitt/action-tmate@v3
    
  4. Conectarse al contenedor.

  5. Abrir frankenphp.go.

  6. Activar cgosymbolizer:

    - //_ "github.com/ianlancetaylor/cgosymbolizer"
    + _ "github.com/ianlancetaylor/cgosymbolizer"
    
  7. Descargar el módulo: go get.

  8. Dentro del contenedor, puede usar GDB y similares:

    go test -tags watcher -c -ldflags=-w
    gdb --args frankenphp.test -test.run ^MyTest$
    
  9. Cuando el error esté corregido, revierta todos los cambios.

# Recursos diversos para el desarrollo

# Recursos relacionados con Docker

# Comando útil

apk add strace util-linux gdb
strace -e 'trace=!futex,epoll_ctl,epoll_pwait,tgkill,rt_sigreturn' -p 1

# Traducir la documentación

Para traducir la documentación y el sitio a un nuevo idioma, siga estos pasos:

  1. Cree un nuevo directorio con el código ISO de 2 caracteres del idioma en el directorio docs/ de este repositorio.
  2. Copie todos los archivos .md de la raíz del directorio docs/ al nuevo directorio (siempre use la versión en inglés como fuente de traducción, ya que siempre está actualizada).
  3. Copie los archivos README.md y CONTRIBUTING.md del directorio raíz al nuevo directorio.
  4. Traduzca el contenido de los archivos, pero no cambie los nombres de los archivos, tampoco traduzca las cadenas que comiencen por > [! (es un marcado especial para GitHub).
  5. Cree una Pull Request con las traducciones.
  6. En el repositorio del sitio, copie y traduzca los archivos de traducción en los directorios content/, data/ y i18n/.
  7. Traduzca los valores en el archivo YAML creado.
  8. Abra una Pull Request en el repositorio del sitio.
Editar esta página