EGPHP'de PHP

İnşa ettiğimiz her şey PHP ile başlar.

Ekibimiz yirmi beş yıldır, PHP 4'ten beri PHP yazıyor ve çalıştırıyor. Sunucular, kontrol paneli ve bakımını yaptığımız siteler hep buradan başlar.

Yirmi beş yıl, sürüm sürüm

Bu sürümleri bir yerden okumadık. Gerçek siteleri her birinden geçirerek yükselttik; aşağıdaki her satır, canlı bir sunucuda uğraşmak zorunda kaldığımız bir değişiklik.

  1. PHP 4 2000

    Oturumlar ve çıktı tamponlama, dilin içinde

    Zend Engine geldi; oturumlar ve çıktı tamponlama eklenti olmaktan çıkıp dilin bir parçası oldu. İlk dinamik sitelerin bütün bir kuşağı onun üzerine yazıldı.

    • Zend Engine
    • session_start()
    • ob_start()
    Bizim için anlamı

    Ekibimizin başladığı yer: register_globals hâlâ açıkken paylaşımlı sunucularda elle yazılmış siteler.

  2. PHP 5.0 2004

    Gerçek bir nesne modeli

    Zend Engine 2; görünürlük tanımlı sınıfları, arayüzleri ve istisnaları, kopyalanmak yerine tanıtıcı üzerinden aktarılan nesneleri ve MySQLi ile SimpleXML uzantılarını getirdi.

    • private
    • interface
    • try / catch
    • mysqli
    Bizim için anlamı

    Kod, bir ekibin ortak kullandığı sınıflar halinde düzenlenebilir oldu ve veritabanı modern bir sürücüye kavuştu.

  3. PHP 5.3 2009

    Ad alanları ve closure'lar

    Ad alanları, anonim fonksiyonlar ve geç statik bağlama: Composer'ın ve ortak paket ekosisteminin daha sonra üzerine kurulduğu zemin.

    • namespace
    • function () use ()
    • static::
    Bizim için anlamı

    Farklı yazarların kütüphaneleri, adları çakışmadan nihayet aynı projede bir arada yaşayabildi.

  4. PHP 5.4 2012

    Trait'ler, kısa diziler ve bir temizlik Eski kodu bozdu

    Trait'ler, kısa [] dizi sözdizimi ve yerleşik bir geliştirme sunucusu geldi; register_globals, magic quotes ve safe mode ise tamamen kaldırıldı.

    • trait
    • [ ]
    • php -S
    Bizim için anlamı

    register_globals'a dayanan eski siteler çalışmayı bıraktı; onları yükseltmek, önce onları düzeltmek anlamına geliyordu.

  5. PHP 5.5 2013

    OPcache artık PHP'nin içinde

    OPcache doğrudan PHP ile birlikte gelmeye başladı ve derlenmiş betikleri bellekte tuttu; yanında generator'lar ve password_hash() da geldi.

    • opcache
    • yield
    • password_hash()
    Bizim için anlamı

    Derlenmiş kod her istekte yeniden okunmak yerine bellekte tutuldu. Herhangi bir PHP sunucusunda hâlâ ilk kontrol ettiğimiz ayar budur.

  6. PHP 6 hiç yayınlanmadı

    Hiç çıkmayan sürüm

    PHP 6, yerel Unicode dizeler üzerine planlandı ve rafa kaldırıldı. Sonraki sürüme, 6 için yazılmış kitaplar ve planlarla karıştırılmasın diye 7 numarası verildi.

  7. PHP 7.0 2015

    Hız sıçraması Eski kodu bozdu

    Baştan yeniden kurulmuş bir motor; PHP projesi onu 5.6'dan iki kata kadar hızlı ve daha az bellek kullanan bir motor olarak tanımladı. Yanında skaler ve dönüş tipi bildirimleri, ?? ve <=> geldi.

    • int $id
    • : string
    • ??
    • <=>
    Bizim için anlamı

    Eski mysql_* fonksiyonları kaldırıldı; bu, eski bir sitenin bu yükseltmede bozulmasının sık rastlanan nedenlerinden biriydi.

  8. PHP 7.4 2019

    Tipli özellikler ve ön yükleme

    Tipli özellikler, ok fonksiyonları, ??= operatörü, OPcache ön yüklemesi ve FFI.

    • public int $id
    • fn ($x) =>
    • ??=
    Bizim için anlamı

    Son 7.x sürümü ve birçok eski uygulamanın en uzun süre kaldığı sürüm; siteleri ondan hâlâ bu yüzden taşıyoruz.

  9. PHP 8.0 2020

    JIT, öznitelikler ve adlandırılmış argümanlar Eski kodu bozdu

    Bir JIT derleyicisi, öznitelikler, adlandırılmış argümanlar, birleşim tipleri, match, nullsafe ?-> operatörü ve yapıcıda özellik tanımlama.

    • #[Attribute]
    • match
    • ?->
    • JIT
    Bizim için anlamı

    Birçok uyarı hataya dönüştü ve dizelerle sayılar arasındaki karşılaştırmalar değişti; bu yüzden 7.4'te sessizce çalışan kod 8.0'da durabiliyordu.

  10. PHP 8.1 2021

    Enum'lar, readonly ve fiber'lar

    Yerel enum'lar, readonly özellikler, fiber'lar, never dönüş tipi ve birinci sınıf çağrılabilir sözdizimi.

    • enum
    • readonly
    • Fiber
    • never
    Bizim için anlamı

    Fiber'lar, sıradan bir isteğin çalışma biçimini değiştirmeden asenkron PHP kütüphanelerinin önünü açtı.

  11. PHP 8.2 2022

    Readonly sınıflar ve eski kod için bir uyarı

    Readonly sınıflar, DNF tipleri, bağımsız tip olarak true, false ve null ile yeni bir Random uzantısı.

    • readonly class
    • (A&B)|null
    • Random\Randomizer
    Bizim için anlamı

    Dinamik özellikler kullanımdan kaldırılacak olarak işaretlendi; eski eklentiler güncellenene kadar logları bildirimlerle doldurdu.

  12. PHP 8.3 2023

    Tipli sabitler ve #[\Override]

    Tipli sınıf sabitleri, #[\Override] özniteliği, json_validate() ve dinamik sınıf sabiti erişimi.

    • const string
    • #[\Override]
    • json_validate()
    Bizim için anlamı

    Daha sakin bir sürüm; bu da onu zaten 8.2'de olan siteler için kolay bir adım yapıyor.

  13. PHP 8.4 2024

    Özellik kancaları

    Özellik kancaları, asimetrik görünürlük, tembel nesneler, HTML5 uyumlu bir DOM ayrıştırıcı ve fazladan parantez gerektirmeyen new MyClass()->method().

    • get { }
    • public private(set)
    • Dom\HTMLDocument
    Bizim için anlamı

    Eskiden her biri için ayrı bir metot gereken getter ve setter'lar artık özelliğin kendisine ait; böylece bakımı yapılacak kod azalıyor.

  14. PHP 8.5 2025

    Pipe operatörü Güncel

    |> pipe operatörü, yerleşik bir URI uzantısı, clone with, #[\NoDiscard] özniteliği, array_first() ile array_last() ve ölümcül hatalarda backtrace.

    • |>
    • Uri\Rfc3986\Uri
    • clone($o, [ ])
    Bizim için anlamı

    Güncel sürüm serisi; kodları destekliyorsa yeni siteleri bu seriyle başlatıyoruz.

Yıllar, PHP projesinin kendi sürüm geçmişindeki ilk yayın yıllarıdır.

Bir isteği yığın boyunca takip edin

PHP sitesindeki bir sayfa, içeri girerken beş katmandan geçer, dönüşte de aynı beş katmandan yukarı çıkar. Her birinin bakımını biz yaparız ve her birinin kendi sayfası vardır.

  1. Ziyaretçi

    Bir tarayıcı HTTPS üzerinden bir sayfa ister. İsteğin içeri alınıp alınmayacağına sertifika, güvenlik duvarı ve sunucunun önündeki kurallar karar verir.

  2. Web sunucusu

    Bağlantıyı Nginx ya da LiteSpeed karşılar, görselleri ve dosyaları kendisi sunar, arkasındaki havuza yalnızca PHP işini devreder.

  3. PHP çalışma ortamı

    Her site için bir tane olmak üzere PHP-FPM havuzları: her biri kodunun ihtiyaç duyduğu PHP sürümünde, OPcache sıcak ve işçi süreçleri trafiğe göre boyutlandırılmış.

  4. Kodunuz

    İsteği bir çatı ya da hazır bir platform sayfaya dönüştürür: kendi Laravel uygulamanız ya da WordPress, Magento, Moodle ve diğerleri.

  5. Veri

    Kayıtları MySQL ya da MariaDB tutar; Redis ise tekrar tekrar istenenleri bellekte tutar.

Beşinin de altında

Sunucunun kendisi

Aynı ekibin işlettiği kendi sunucularımız ve üstünde kendi kontrol panelimiz.

Kötü bir sabah yaşamadan daha yeni bir PHP'ye geçmek

Her site kendi havuzunu alır; böylece tek bir sunucu birkaç PHP sürümünü yan yana çalıştırabilir ve her site, sunucu hazır olduğunda değil, kendi kodu hazır olduğunda geçiş yapar.

  1. Her sitenin neyle çalıştığını listeleriz

    PHP sürümü, uzantıları ve onu geride tutan eklentiler ya da paketler.

  2. Bir kopya yeni sürümü dener

    Site kopyalanır ve bir sonraki PHP sürümünde çalıştırılır; hata günlüğü satır satır okunur.

  3. Bozulanı düzeltiriz

    Kaldırılmış fonksiyonlar, kullanımdan kaldırılması planlanan çağrılar ve güncellemesi olmayan eklentiler düzeltilir ya da değiştirilir.

  4. Her seferinde bir site

    Her site yeni havuzuna tek başına geçer ve gözden kaçan bir şey olursa hemen geri alınabilir.

php-fpmTek sunucu, birkaç sürüm
SitePHPHavuzDurum
shop.example.com 8.4 fpm-shop canlı
blog.example.com 8.3 fpm-blog canlı
crm.example.com 7.4 → 8.3 fpm-crm kopyada
learn.example.com 8.3 fpm-learn canlı
Örnek bir sunucu

PHP'nizi bize getirin

Daha yeni bir PHP'ye ihtiyaç duyan eski bir site, kurulacak bir platform ya da hepsini çalıştıracak bir sunucu. Her iş kısa bir görüşmenin ardından fiyatlandırılır.