CPalius CMF 1.1.3
Yayın: 2026-09-16 · Kanal: kararlı · Kritik: hayır
Yama kurucusunun kendisine ait bir düzeltme; 1.1.2 canlı bir siteye uygulanırken ortaya çıktı. 1.1.2'de olan herkes, bir sonraki yamadan önce bunu almalı.
Ne bozuldu
1.1.2'yi uygulamak siteyi şu hatayla düşürdü:
ArgumentCountError: Too few arguments to function
Modules\Forum\Service\ForumReputationService::__construct(),
6 passed in .../cache/prod/ContainerXXXX/getForumReputationServiceService.php
and exactly 7 expected
Yeni sınıf dosyası diskte, onu kuran eski fabrika dosyası önbellekte. Yama zaten uygulanmış olduğu için tekrar denemek de bir işe yaramıyordu.
Neden
Kernel önbellek temizliği bilerek shutdown'a erteleniyor — hâlâ çalışan bir
isteğin derlenmiş konteynerini altından çekmek kendi başına bir ölüm sebebi.
Bunun bedeli bir pencere: apply() döndüğü andan yanıt gönderilene kadar çalışan
her satır, yeni sınıf dosyalarını eski konteynerden geçiriyor.
Yama ekranı tam da o pencerede yapılabilecek en kötü iki şeyi yapıyordu: güncelleme planlayıcısını çalıştırıyor ve güncelleme sayfasını baştan render ediyordu. 1.1.2 bir servisin kurucusunu altı argümandan yediye çıkardı, olan oldu. Önceki yamaların kurtulmasının tek sebebi, hiçbirinin bir kurucuyu değiştirmemiş olmasıydı.
Düzeltmeler
-
Başarı yolu artık yalnızca yönlendirme.
RedirectResponseyalnızca router'a ihtiyaç duyar, o da yama yazılmadan çok önce yüklenmişti. Temizlik eskisi gibi shutdown'da çalışıyor, ardından gelen GET ise yeni koddan derlenmiş konteynerle karşılanıyor. Yama günlüğü yönlendirmeden sağ çıkıyor ve indiğiniz sayfada gösteriliyor. -
Başarısız temizlik artık sessiz değil. Temizlikteki her dosya sistemi çağrısı
@ile bastırılmış; yani "hata çıkmadı", "dizin silindi" anlamına hiç gelmiyordu — üstelik operatöre çoktan "önbellek temizlendi" gösterilmiş oluyordu. Temizlik artık kendini doğruluyor (geriye kalan derlenmiş fabrika dosyalarını sayarak), çalışmadıysacp-core/var/update/cache-purge-failed.jsonbırakıyor, ve güncelleme ekranı bunu ne yapılması gerektiğiyle birlikte kırmızı kutuda gösteriyor.Bu en çok paylaşımlı hostingte önemli: önbellek dizini çoğu zaman PHP'nin çalıştığı kullanıcıdan başka birine ait oluyor.
-
Hata yolu değişmedi, tam ekranı render etmeye devam ediyor: kurucu, hatayı fırlatmadan önce eski dosyaları geri yüklüyor; yani ağaç konteynerle yine uyumlu ve bunda sakıncalı bir şey yok.
Yükseltme notları
Yamayı uygulamak dışında yapılacak bir şey yok.
Şu an 1.1.2'de takılı kaldıysanız — site ArgumentCountError ile 500
veriyorsa — açılmayan bir panelden yama uygulanamaz. FTP ile
cp-core/var/cache/prod/ içindeki her şeyi silin (klasörün kendisi kalsın), sonra
siteyi açın. İlk istek konteyneri yeniden derler, birkaç saniye sürer. Hostingte
OPcache opcache.validate_timestamps=0 ile çalışıyorsa hosting panelinden PHP'yi
de yeniden başlatın; aksi hâlde silinen dosyalar bellekten servis edilmeye devam
eder.