* Tideways now supports FrankenPHP worker mode See https://support.tideways.com/documentation/setup/installation/frankenphp.html * Update fr/known-issues.md * Update tr/known-issues.md
6.4 KiB
Bilinen Sorunlar
Fibers
Fibers içinde cgo çağrısı yapan PHP fonksiyonlarının ve dil yapılarının çağrılmasının çökmelere neden olduğu bilinmektedir.
Bu sorun Go projesi tarafından üzerinde çalışılmaktadır.
Bu arada, bir çözüm Fibers içinden Go'ya temsilci atayan yapıları (echo
gibi) ve fonksiyonları (header()
gibi) kullanmamaktır.
Bu kod, Fiber içinde echo
kullandığı için büyük olasılıkla çökecektir:
$fiber = new Fiber(function() {
echo 'In the Fiber'.PHP_EOL;
echo 'Still inside'.PHP_EOL;
});
$fiber->start();
Bunun yerine, değeri Fiber'den döndürün ve dışarıda kullanın:
$fiber = new Fiber(function() {
Fiber::suspend('In the Fiber'.PHP_EOL));
Fiber::suspend('Still inside'.PHP_EOL));
});
echo $fiber->start();
echo $fiber->resume();
$fiber->resume();
Desteklenmeyen PHP Eklentileri
Aşağıdaki eklentilerin FrankenPHP ile uyumlu olmadığı bilinmektedir:
Adı | Nedeni | Alternatifleri |
---|---|---|
imap | İş parçacığı güvenli değil | javanile/php-imap2, webklex/php-imap |
Sorunlu PHP Eklentileri
Aşağıdaki eklentiler FrankenPHP ile kullanıldığında bilinen hatalara ve beklenmeyen davranışlara sahiptir:
Adı | Problem |
---|
get_browser
get_browser() fonksiyonu bir süre sonra kötü performans gösteriyor gibi görünüyor. Geçici bir çözüm, statik oldukları için User-Agent başına sonuçları önbelleğe almaktır (örneğin APCu ile).
Binary Çıktısı ve Alpine Tabanlı Docker İmajları
Binary çıktısı ve Alpine tabanlı Docker imajları (dunglas/frankenphp:*-alpine), daha küçük bir binary boyutu korumak için glibc ve arkadaşları yerine musl libc kullanır. Bu durum bazı uyumluluk sorunlarına yol açabilir. Özellikle, glob seçeneği GLOB_BRACE mevcut değildir.
Docker ile https://127.0.0.1
Kullanımı
FrankenPHP varsayılan olarak localhost
için bir TLS sertifikası oluşturur.
Bu, yerel geliştirme için en kolay ve önerilen seçenektir.
Bunun yerine ana bilgisayar olarak 127.0.0.1
kullanmak istiyorsanız, sunucu adını 127.0.0.1
şeklinde ayarlayarak bunun için bir sertifika oluşturacak yapılandırma yapmak mümkündür.
Ne yazık ki, ağ sistemi nedeniyle Docker kullanırken bu yeterli değildir.
Curl: (35) LibreSSL/3.3.6: error:1404B438:SSL routines:ST_CONNECT:tlsv1 alert internal error
'a benzer bir TLS hatası alırsınız.
Linux kullanıyorsanız, ana bilgisayar ağ sürücüsünü kullanmak bir çözümdür:
docker run \
-e SERVER_NAME="127.0.0.1" \
-v $PWD:/app/public \
--network host \
dunglas/frankenphp
Ana bilgisayar ağ sürücüsü Mac ve Windows'ta desteklenmez. Bu platformlarda, konteynerin IP adresini tahmin etmeniz ve bunu sunucu adlarına dahil etmeniz gerekecektir.
docker network inspect bridge
'i çalıştırın ve IPv4Address
anahtarının altındaki son atanmış IP adresini belirlemek için Containers
anahtarına bakın ve bir artırın. Eğer hiçbir konteyner çalışmıyorsa, ilk atanan IP adresi genellikle 172.17.0.2
dir.
Ardından, bunu SERVER_NAME
ortam değişkenine ekleyin:
docker run \
-e SERVER_NAME="127.0.0.1, 172.17.0.3" \
-v $PWD:/app/public \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp
Caution
172.17.0.3`ü konteynerinize atanacak IP ile değiştirdiğinizden emin olun.
Artık ana makineden https://127.0.0.1
adresine erişebilmeniz gerekir.
Eğer durum böyle değilse, sorunu anlamaya çalışmak için FrankenPHP'yi hata ayıklama modunda başlatın:
docker run \
-e CADDY_GLOBAL_OPTIONS="debug" \
-e SERVER_NAME="127.0.0.1" \
-v $PWD:/app/public \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp
@php
Referanslı Composer Betikler
Composer betikleri bazı görevler için bir PHP binary çalıştırmak isteyebilir, örneğin bir Laravel projesinde @php artisan package:discover --ansi
çalıştırmak. Bu şu anda mümkün değil ve 2 nedeni var:
- Composer FrankenPHP binary dosyasını nasıl çağıracağını bilmiyor;
- Composer, FrankenPHP'nin henüz desteklemediği
-d
bayrağını kullanarak PHP ayarlarını komuta ekleyebilir.
Geçici bir çözüm olarak, /usr/local/bin/php
içinde desteklenmeyen parametreleri silen ve ardından FrankenPHP'yi çağıran bir kabuk betiği oluşturabiliriz:
#!/bin/bash
args=("$@")
index=0
for i in "$@"
do
if [ "$i" == "-d" ]; then
unset 'args[$index]'
unset 'args[$index+1]'
fi
index=$((index+1))
done
/usr/local/bin/frankenphp php-cli ${args[@]}
Ardından PHP_BINARY
ortam değişkenini PHP betiğimizin yoluna ayarlayın ve Composer bu yolla çalışacaktır:
export PHP_BINARY=/usr/local/bin/php
composer install