Sistem Güncelleme — Sürüm Kontrolü ve Syntax Doğrulaması
Sistem güncelleme servisi artık iki kademeli bir güvenlik kontrolüne sahiptir: sürüm kontrolü ve PHP syntax kontrolü. Her ikisi de zip yüklendikten sonra, dosyalar gerçek hedeflerine kopyalanmadan önce çalışır. Hata varsa hiçbir dosya yazılmaz, hiçbir migrate çalıştırılmaz, sistem önceki durumunda kalır.
Mevcut sürümünüzü nereden görürsünüz?
Yönetici paneli → Ayarlar → Güncelleme sayfasının üst kısmında iki rozet vardır:
- Mevcut sürüm — proje kökündeki
VERSIONdosyasından okunur. Dosya yoksa varsayılan baseline (1.2.0) gösterilir. - Beklenen sıradaki sürüm — patch artımı ile bir sonraki sürüm. Örnek: mevcut 1.2.1 ise beklenen 1.2.2.
VERSION dosyasının kuralı
Her güncelleme zip paketinin kök dizininde (zip içindeki app/ ile aynı seviyede) VERSION adlı tek satırlık bir dosya bulunmak zorundadır. İçeriği örneğin:
1.2.1
- Format kesinlikle MAJOR.MINOR.PATCH olmalı, yalnızca rakam ve nokta.
- Boş, eksik veya geçersiz formattaki dosya reddedilir.
- Apply başarılı olduğunda bu dosya proje kökündeki VERSION dosyasının üzerine yazılır.
Sıralı patch artımı (atlama yok)
Yapılan güncellemeler "atlama" şeklinde değil, sıralı uygulanmak zorundadır. Aşağıdaki örnekler kabul/red durumlarını gösterir:
| Mevcut | Gelen | Sonuç | Sebep |
|---|---|---|---|
| 1.2.0 | 1.2.1 | OK | Patch +1, sıralı. |
| 1.2.1 | 1.2.1 | RED | Aynı sürüm tekrar yüklenemez. |
| 1.2.1 | 1.2.0 | RED | Geri sürümleme yasak. |
| 1.2.1 | 1.2.3 | RED | Patch atlandı; önce 1.2.2 yüklenmeli. |
| 1.2.5 | 1.3.0 | OK | Minor +1, patch sıfırlandı. |
| 1.2.5 | 1.3.2 | RED | Minor artımında patch sıfır olmalı. |
| 1.4.7 | 1.6.0 | RED | Minor atlandı; önce 1.5.0 yüklenmeli. |
| 1.9.4 | 2.0.0 | OK | Major +1, minor ve patch sıfırlandı. |
PHP syntax kontrolü (php -l)
Apply adımına geçmeden önce, staging klasöründeki tüm .php dosyaları php -l komutuyla parse edilir. Tek bir dosyada bile syntax error varsa:
- Hiçbir dosya hedefe kopyalanmaz.
- Migrate çalışmaz, optimize:clear çalışmaz.
- Hata mesajında ilk 5 problemli dosyanın adı ve satır numarası listelenir.
- Staging klasörü saklanır (varsayılan), inceleme için sunucuda durur.
Bu kontrol özellikle Türkçe metin içeren migration dosyalarındaki tek tırnak içinde apostrof hatalarını yakalar (örn. tek tırnak içinde Turkce kesme isareti kullanmak parse error verir). Bu yüzden geliştirici notu: Türkçe içerik yazarken tek tırnak yerine çift tırnak veya nowdoc bloğu kullanın.
Hata mesajları
Tüm kontrol hataları güncelleme sayfasında kırmızı uyarı kutusu içinde Türkçe olarak gösterilir. Tipik mesajlar:
- "Pakette VERSION dosyası bulunamadı."
- "Bu sürüm zaten kurulu: 1.2.1."
- "Eski sürüm yüklenemez."
- "Sürümler sıralı yüklenmelidir. Bir sonraki beklenen sürüm: 1.2.2. Atlama yapılamaz."
- "Pakette PHP syntax hatası tespit edildi, hiçbir dosya kopyalanmadı. İlk hatalar: ..."
Yapılandırma anahtarları
config/system_updates.php içinde:
version_check_enabled(varsayılan true) — sürüm kontrolünü açar/kapatır.version_fallback(varsayılan 1.2.0) — VERSION dosyası yoksa baseline kabul edilir.syntax_check_enabled(varsayılan true) — PHP syntax kontrolünü açar/kapatır.php_binary(varsayılan PHP_BINARY) — syntax kontrolü için kullanılacak php yorumlayıcısı yolu.
Acil durumda kontrolü geçici kapatmak için .env'e SYSTEM_UPDATES_VERSION_CHECK=false veya SYSTEM_UPDATES_SYNTAX_CHECK=false ekleyip php artisan config:clear çalıştırabilirsiniz. Önerilen: kontrolleri açık tutmak.
Geri alma (rollback)
Başarılı her güncellemede üzerine yazılan dosyaların eski hali storage/app/system-updates/backups/<batch>/ altına kopyalanır. VERSION dosyası da bu yedeğin içindedir. Geri dönüş gerekirse o klasördeki dosyaları manuel olarak hedef konumlara geri kopyalayıp VERSION dosyasını da geri alın.
Geliştiriciler için: paket nasıl hazırlanır?
- Yapılan değişikliklerin etkilediği tüm dosyaları (Laravel kök yapısına uygun şekilde) bir klasör altında toplayın.
- Klasörün kök seviyesine tek satırlık
VERSIONdosyası ekleyin (örn.1.2.2). - Klasörü zip olarak sıkıştırın.
- Yerelde önce
php -lile değişen tüm PHP dosyalarını kontrol edin (otomatik kontrol var ama yerelde yakalamak hızlandırır). - Yönetici panelinde Ayarlar → Güncelleme'den zip'i yükleyin; üst rozette beklenen sürümü doğrulayın.