Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Tarafından desteklenmektedir
Katkıda Bulunmak

Katkıda Bulunmak

# PHP Derleme

# Docker ile (Linux)

Geliştirme Ortamı için Docker İmajını Oluşturun:

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

İmaj genel geliştirme araçlarını (Go, GDB, Valgrind, Neovim…) içerir.

Docker sürümü 23.0’dan düşükse, derleme dockerignore pattern issue tarafından başarısız olur. Dizinleri .dockerignore dosyasına ekleyin.

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

# Docker olmadan (Linux ve macOS)

Kaynaklardan derlemek için talimatları izleyin ve --debug yapılandırma seçeneğini geçirin.

# Test senaryolarını çalıştırma

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

# Caddy modülü

FrankenPHP Caddy modülü ile Caddy’yi oluşturun:

cd caddy/frankenphp/
go build
cd ../../

Caddy’yi FrankenPHP Caddy modülü ile çalıştırın:

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

Sunucu 127.0.0.1:8080 adresini dinliyor:

curl -vk https://localhost/phpinfo.php

# Minimal test sunucusu

Minimal test sunucusunu oluşturun:

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

Test sunucusunu çalıştırın:

cd testdata/
../internal/testserver/testserver

Sunucu 127.0.0.1:8080 adresini dinliyor:

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

# Docker İmajlarını Yerel Olarak Oluşturma

Bake (pişirme) planını yazdırın:

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

Yerel olarak amd64 için FrankenPHP görüntüleri oluşturun:

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

Yerel olarak arm64 için FrankenPHP görüntüleri oluşturun:

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

FrankenPHP imajlarını arm64 ve amd64 için sıfırdan oluşturun ve Docker Hub’a gönderin:

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

# Statik Derlemelerle Segmentasyon Hatalarında Hata Ayıklama

  1. FrankenPHP binary dosyasının hata ayıklama sürümünü GitHub’dan indirin veya hata ayıklama seçeneklerini kullanarak özel statik derlemenizi oluşturun:

    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 dunglas/frankenphp:static-builder):/go/src/app/dist/frankenphp-linux-$(uname -m) frankenphp
    
  2. Mevcut frankenphp sürümünüzü hata ayıklama FrankenPHP çalıştırılabilir dosyasıyla değiştirin

  3. FrankenPHP’yi her zamanki gibi başlatın (alternatif olarak FrankenPHP’yi doğrudan GDB ile başlatabilirsiniz: gdb --args frankenphp run)

  4. GDB ile sürece bağlanın:

    gdb -p `pidof frankenphp`
    
  5. Gerekirse, GDB kabuğuna continue yazın

  6. FrankenPHP’nin çökmesini sağlayın

  7. GDB kabuğuna bt yazın

  8. Çıktıyı kopyalayın

# GitHub Eylemlerinde Segmentasyon Hatalarında Hata Ayıklama

  1. .github/workflows/tests.yml dosyasını açın

  2. PHP hata ayıklama seçeneklerini etkinleştirin

        - uses: shivammathur/setup-php@v2
          # ...
          env:
            phpts: ts
    +       debug: true
    
  3. Konteynere bağlanmak için tmatei etkinleştirin

        -
          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. Konteynere bağlanın

  5. frankenphp.go dosyasını açın

  6. cgosymbolizer‘ı etkinleştirin

    -	//_ "github.com/ianlancetaylor/cgosymbolizer"
    +	_ "github.com/ianlancetaylor/cgosymbolizer"
    
  7. Modülü indirin: go get

  8. Konteynerde GDB ve benzerlerini kullanabilirsiniz:

    go test -tags watcher -c -ldflags=-w
    gdb --args frankenphp.test -test.run ^MyTest$
    
  9. Hata düzeltildiğinde, tüm bu değişiklikleri geri alın

# Misc Dev Resources

# Docker ile İlgili Kaynaklar

# Faydalı Komut

apk add strace util-linux gdb
strace -e 'trace=!futex,epoll_ctl,epoll_pwait,tgkill,rt_sigreturn' -p 1
Bu sayfayı düzenleyin