Ana Sayfa
Duyurular IRCdForum.Net yönetimince gerçekleştirilen duyuruları takip edebileceğiniz alan.


IRCdForum.Net Büyük Altyapı Modernizasyonu: PHP 8.5 + UTF-8 + InnoDB

IRCdForum.Net yönetimince gerçekleştirilen duyuruları takip edebileceğiniz alan.


Kullanıcı Etiket Listesi
AfilLİ, ahmetserkan, aLeyna, alpagu, anatoLya, Armerian, Astrea, Ayışığı, AyKuT, Aze, aZze, Baby, Beatrice, BerduŞ, birsevda, BLackLorD, BuRHaN, BuYuCu, BuzprenS, can-i, Cohen, Convex, Cry, CtrL, czmert

46Beğeniler

 
 
LinkBack Konu Araçları Görünüm Modları
20 Eylül 2026, 21:03   #1
Çevrimiçi
Varsayılan IRCdForum.Net Büyük Altyapı Modernizasyonu: PHP 8.5 + UTF-8 + InnoDB

Dile kolay 5 aydır uğraştığım, zaman zaman burada da bahsettiğim, yine zaman zaman yazılımcı ve webmaster arkadaşlarımla yaptığımız sohbetlerde de sıklıkla gerekliliğine dem vurduğum, üzerinde çalıştığımı belirttiğim; IRCdForum.Net altyapı modernizasyonunun en büyük aşamasını bugün itibarıyla tamamlamış bulunuyorum.

Öncelikle konu teknik bir yazı olacağından biraz uzun olacak, dolayısıyla bu konulara ilgi duymayan kullanıcılarımız için kısaca geçeyim; yapılan çalışmalar altyapıyla ilgili olup, görünüşte size değişen herhangi bir görsel farklılık deneyimletmeyecek. Performans, hız, stabil çalışma ve günümüz teknolojilerine uygun hale getirme olarak özetleyebilirim yapılanları.

Bunun özellikle IRC forum siteleri içerisinde bir ilk olduğunu, günümüzdeki vBulletin 3.8 kullanan R10 hariç neredeyse bütün forumların (en azından %90'ının) PHP 5.6 altında çalıştığını rahatlıkla söyleyebilirim. PHP 8.x'lere çıktığını iddia edenler varsa da onlar aşağıda da açıklayacağım üzere hata ve uyarıları susturarak işi çözüyorlar, yani çözdüğünü sanıyorlar, bu yanlış; bununla uyumluluk çalışması olmaz.

Başlamadan yine önemle vurgulamak istiyorum ki; bu konuyu birçok webmaster ve kod editörü okuyup, takip edecek, heves edecektir. Dilerseniz AI ile bu geçişi deneyebilirsiniz ama yazılım/kodlama bilginiz yoksa bence boşa denemeyin, aklınız ermez.. Yani AI böyle bir şeyi tek başına yapamaz.

---

Devam edelim...

IRCdForum.Net artık;
  • PHP 8.5.10 üzerinde çalışıyor
  • veritabanı tarafında eski latin1 / Windows-1254 düzeni yerine gerçek UTF-8 / utf8mb4 kullanıyor
  • eski nesil MyISAM tablolar InnoDB'ye geçirilmiş durumda
  • vBulletin 3.8.11 çekirdeği, vBSEO 3.6, product/plugin sistemi, veritabanında çalışan plugin kodları, özel core editler ve yıllar içerisinde geliştirdiğimiz ek fonksiyonlar PHP 8 davranışlarına göre uyarlanmış durumda.

Özetle dışarıdan baktığınızda hâlâ bildiğiniz vBulletin 3.8.11'i kullanıyoruz.

Ancak o vBulletin'in altında çalışan teknik katman artık 2000'li ve 2010'lu yılların PHP/MySQL şartlarına bağımlı değil.

Kullandığımız yazılımın tarihçesi

vBulletin 3.8, oldukça eski bir yazılım.

vBulletin 3.8 serisi 2012 yılında end of life olarak sınıflandırıldı. Bunun anlamı; normal bugfix ve yeni özellik geliştirmesinin sona ermesi ve ürünün legacy statüsüne geçmesiydi.

Ancak 3.8 serisinin hayatı teknik olarak o gün tamamen sona ermedi.

Aradan yaklaşık beş yıl geçtikten sonra, özellikle dönemin yeni PHP sürümleriyle uyumluluk gibi bakım ihtiyaçları nedeniyle vBulletin 3.8.11, 10 Mayıs (doğum günüm) 2017'de 3.8 serisinin son/final sürümü olarak yayımlandı.

EOL tarihi: 2012

Son 3.8.x sürümü: 3.8.11 / 2017

PHP tarafında da durum çok farklı değil.

PHP 5.6'nın resmî desteği 31 Aralık 2018'de,

PHP 7.1'in resmî desteği ise 1 Aralık 2019'da

sona erdi.

Daha önce IRCdForum.Net'i PHP 5.x döneminden PHP 7.1'e uyarlamıştım. vBulletin 3.8.11, varsayılan olarak PHP 7.1 uyumlu olsa da başta vBSEO olmak üzere ek bileşenlerin çoğu uyumsuzdu.

Bu geçiş önemliydi ama hiçbir zaman nihai hedef değildi.

Bugün ise bu forum, bu duyuruyu hazırladığım tarih itibarıyla PHP'nin en son sürümü olan ve halihazırda desteği de sürmekte olan PHP 8.5.10 üzerinde çalışıyor.

PHP 8.5 dalının aktif desteği 31 Aralık 2027'ye, güvenlik desteği ise 31 Aralık 2029'a kadar devam edecek.

Yani bu defa yalnızca eski ama biraz daha yeni bir PHP sürümüne yükseltmedik, güncel ve resmî olarak desteklenen en yeni PHP sürümüne geçmiş olduk.

Yukarıda da belirttiğim gibi forumun çalışma ortamı yalnızca vBulletin'in fiziksel PHP dosyalarından oluşmuyor.

IRCdForum.Net'te;
  • vBulletin 3.8.11 çekirdeği,
  • aylar içerisinde yapılmış core editler,
  • vBSEO 3.6,
  • DBTech ve diğer üçüncü taraf eklentiler,
  • product/XML sistemi,
  • veritabanında hook'lara bağlı olarak çalışan plugin PHP kodları,
  • AdminCP ve ModCP,
  • template compiler,
  • phrase sistemi,
  • DataManager sınıfları,
  • mail sistemi,
  • attachment ve upload katmanı,
  • session/cache yapısı,
  • cron görevleri,
  • ve IRCdForum.Net'e özel geliştirmeler

birlikte çalışıyor.

Bunlardan herhangi birinin PHP 8 ile uyumsuz olması forumun bazı bölümlerinin tamamen çökmesi veya daha kötüsü, yalnızca belirli bir işlem yapılınca ortaya çıkan sessiz hatalar üretmesi için yeterli.

Bu nedenle çalışmanın alabildiğine kusursuz, eksiksiz ve tam teşekküllü tamamlanması gerekiyordu. Sürecin aylarca uğraşımın sonucunda tamamlanması da bu yüzdendi.

Rakamlarla Çalışmanın Kapsamı;

Final PHP 8 dağıtım seti canlı hotfix'lerle birlikte yaklaşık 240 uygulama dosyasından oluşuyor.

Bu dosyaların toplam kod hacmi yaklaşık 214 bin satır.

Temiz vBulletin 3.8.11 dosyaları, orijinal vBSEO 3.6 kaynakları ve veritabanındaki plugin kodlarıyla yapılabilen referans karşılaştırmalarında en az yaklaşık 6.900 satırlık kod ekleme/silme/revizyon farkı bulunuyor.

Burada özellikle "en az" diyorum.

Çünkü yıllar içerisinde IRCdForum.Net'e özel yazılmış veya üzerinde önceden değişiklik yapılmış bazı fiziksel custom dosyaların birebir temiz referansı bulunmadığından onları bu satır hesabına dahil etmek sağlıklı olmazdı.

DB tarafındaki migration ise ayrıca;
  • 74 plugin PHP kodunu,
  • 12 phrase tanımını,
  • 8 phrase-group taşımasını,
  • 2 phrase metin düzeltmesini,
  • 4 setting kaydını,
  • 6 template düzenlemesini

kontrollü şekilde yönetti.

Yalnızca veritabanında saklanan 74 plugin kodunda dahi yaklaşık 400 satırlık satır bazlı kod farkı bulunuyor.

Dolayısıyla burada yapılan iş, birkaç dosyaya birkaç isset() eklemek değil.

PHP 5/7 döneminde çalışan ancak PHP 8'de kaldırılmış veya davranışı değişmiş;
  • create_function(),
  • each(),
  • eski array/string offset kullanımları,
  • parantezsiz nested ternary yapıları,
  • eski mysqli hata modeli,
  • dynamic property davranışları,
  • null/type kontrolleri,
  • eski tarih ve locale fonksiyonları,
  • encoding fonksiyonları,
  • string/array üzerinde gevşek tip davranışları,
  • template compiler'daki tırnaksız array key yapıları,
  • eski callback ve DataManager kullanımları

tek tek ele alındı, baştan kodlandı.

Burada temel prensibim başından beri şuydu; hatayı susturmak değil, hatanın kaynağını düzeltmek.

"@" koyup warning'i saklamak, error_reporting düşürmek veya sorun çıkaran özelliği sessizce devre dışı bırakmak tembelliğe kaçmak ve baştan savma iş yapmak olurdu; bir iş yapılacaksa ya tam yaparım, ya da hiç yapmam. Prensibim, çalışma felsefem her zaman budur.

Bu arada, kodlama işinin kendisi çalışmanın yalnızca bir kısmıydı.

Asıl uzun süren bölüm test ve regresyon süreci oldu.

Sistem;

* misafir,
* normal üye,
* moderatör,
* yönetici

rolleriyle ayrı ayrı test edildi.

Bir noktada ilk normal üye taramasında 15.633 uyarı görüldü.

İlk genel taramalarda ise PHP 8 altında forum önü tarafında yaklaşık 18.979, AdminCP tarafında 746 bini aşan warning/notice olayı üretilebiliyordu.

Çalışmanın sonunda kabul edilen PHP 8.5 testlerinde hedef;

0 fatal / 0 warning

seviyesine getirildi.

Üstelik yalnız PHP 8.5 değil; aynı son kodun gerektiğinde geri dönüş amacıyla PHP 7.1 altında da çalışması ayrıca kontrol edildi.

vBSEO tarafı başlı başına ayrı bir proje

vBSEO'nun geliştirilmesi 2013 yılında sona ermişti.

Dolayısıyla en sancılı konulardan birisi ve ta kendisiydi.

Elimizde yaklaşık 15 yıllık bir kod tabanı var.

Temiz vBSEO 3.6.0 dosyalarıyla bugün IRCdForum.Net'te kullandığımız uyarlanmış vBSEO kaynaklarını karşılaştırdığımda, yalnız fiziksel vBSEO dosyalarında 2.200 satırın üzerinde diff oluşmuş durumda.

Bunun içerisinde geçmiş PHP 7 uyarlamalarım da var, son PHP 8 revizyonları da.

Burada önemli kriterlerden biri şuydu; PHP/charset değişirken aylardır Google tarafından indekslenmiş URL yapısı değişmeyecek.

UTF-8 geçişinde ilk denemede Türkçe başlıkların slug'larının değişebildiği tespit edildi.

Örneğin eski sistemde oluşan bir URL'nin UTF-8 sonrasında farklılaşması SEO açısından kabul edilebilir değildi.

Bu nedenle vBSEO'nun tek baytlık karakter dönüşüm davranışı ayrıca uyarlanarak eski ve yeni sistemde üretilen URL'ler karşılaştırıldı ve aynı tutuldu.

Sonra sıra veritabanının 2000'li yıllardan kalan karakter setine geldi

Kodları PHP 8.5'e taşımakla işin yalnızca PHP tarafını modernize etmiş oluyorduk.

Veritabanımız tarihsel nedenlerle latin1 tanımlıydı.

Ancak gerçekte Türkçe içerik Windows-1254 byte düzeniyle tutuluyordu.

Bu, eski Türkçe vBulletin kurulumlarında yabancı olunan bir yapı değil.

Yıllardır çalışıyor olması doğru ve modern olduğu anlamına gelmiyor.

Dolayısıyla ikinci büyük aşamada forum veritabanı gerçek UTF-8 / utf8mb4 altyapısına taşındı.

Ancak burada;

Kod:
ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4;
deyip geçemezsiniz.

Çünkü MySQL sütunu latin1 sanıyor olabilir ama içindeki byte'ın gerçekte Windows-1254 anlamı taşıması mümkündür.

Kör conversion yaparsanız ayların Türkçe mesajlarını "ü, ÅŸ, ÄŸ" çöplüğüne dönüştürmeniz işten bile değildir.

Üstelik PHP serialized verilerinde bulunan;

Kod:
s:10:"...";
gibi uzunluk değerleri karakter değil byte uzunluğudur.

Bir Windows-1254 Türkçe karakter UTF-8'de iki byte'a çıktığında serialization uzunluklarını doğru hesaplamazsanız veri artık `unserialize()` edilemez.

Bu nedenle dönüşüm için ayrıca journal'lı, durdurulup devam ettirilebilen ve rollback yapabilen özel bir migration aracı geliştirdim.
  • 172 tablo utf8mb4/InnoDB hedef durumuna geçirildi,
  • 314.769 satır tek tek işlendi,
  • bunların 123.769 satırındaki veri gerçekten dönüştürüldü,
  • hedef charset'te temsil edilemediği için alternatif gösterime çevrilmek zorunda kalan kod noktası sayısı 0 oldu.

Yani forumun aylardır birikmiş Türkçe içeriği gerçek UTF-8'e geçirilirken tespit edilen veri kaybı olmadı.

MyISAM'a da veda ettik

Aynı çalışma kapsamında forumun eski nesil MyISAM yapısı InnoDB'ye taşındı.

Bugün onaylı 172 uygulama tablosunun tamamı InnoDB üzerinde çalışıyor.

Bunun getirdiği en önemli kazanımlar;

* tablo seviyesinde kilit yerine satır seviyesinde kilitleme,
* crash recovery,
* transaction altyapısı,
* modern MariaDB/MySQL dünyasıyla daha doğal uyumluluk

olarak özetlenebilir.

---

Bugünkü Teknik Tablo;
  • Forum: vBulletin 3.8.11
  • PHP: PHP 8.5.10
  • DB sunucusu: MariaDB 10.3.39
  • DB karakter seti: utf8mb4
  • Collation: utf8mb4_turkish_ci
  • Storage engine: InnoDB
  • SEO: PHP 8.5 + UTF-8 ortamına uyarlanmış vBSEO 3.6
  • Dil/uygulama charset: UTF-8

---

Sonuç olarak;

2000'li yılların teknolojileri için yazılmış, 2012'de EOL statüsüne alınmış ve son bakım sürümü 2017'de yayımlanmış bir forum yazılımını, vBulletin 3.8 efsanesini, R10'dan sonra Türkiye'de ikinci, IRC forum siteleri bağlamında Türkiye'de ilk olarak 2026 yılının en güncel PHP ortamında çalıştırıyor olmanın haklı gururu ve mutluluğu içerisindeyiz. Özellikle yazılımcı, webmaster ve kod editörü arkadaşlar konuyu okuduklarında çalışmanın ehemmiyetini, ciddiyetini ve önemini illa ki fark edip yorum yapacaktır.

---

Bundan sonraki süreçte canlı hata kayıtlarını ve sistem davranışlarını takip etmeye devam edeceğim.

Gözden kaçan;

* hata sayfası,
* boş ekran,
* bozuk Türkçe karakter,
* farklı çalışan bir özellik,
* arama problemi,
* bozuk URL,
* mesaj/PM gönderim problemi,
* attachment/avatar sorunu,
* beklenmeyen bir hata mesajı

görürseniz mümkünse bulunduğunuz sayfanın bağlantısı ve ekran görüntüsüyle birlikte tarafıma iletmenizi rica ederim. Dün akşam @eLfida ilk hatayı bildirdi, düzelttim. Bugün @Ela da bir hata bildirmişti, onu da düzelttim. Akşam saatlerinde alıntılarla ilgili bir hatayı da kendim tespit ettim; onu da çözdüm. Böylesine devasa bir yazılımın neredeyse dokunulmadık yerini bırakmadığımız bu çalışma kapsamında illa ki gözden kaçırdığımız şeyler olabilir, hepsi fark edildikçe ve bildirildikçe tek tek düzeltilecektir. Kökü bizde.

---

Önemli Not

Bu piyasada vBulletin development adına yaptıklarım herkesin malumu. Ancak böylesine meşakkatli, neredeyse sıfırdan bir CMS yazmışçasına detaylı bir çalışmayı hatır gönül için başka platformlar üzerinde gerçekleştirmem lütfen beklenmesin; bu konuda arkadaşlarım, dostlarım gönül koymasın. İlerleyen günlerde yalnızca teknik sorumlusu ve yazılım geliştiricisi olduğum, biri @Dea Dia'ya, diğeri @Beatrice'e ait olan iki global platforma bu çalışma yapılacaktır. Onun dışında uzun vadede ancak ve ancak ücretli hizmet olarak sunulabilir. Kaldı ki; halihazırda globalde bu hizmeti yalnızca bir Rus sitesi veriyor, Türkiye'de ise bu işi yapan kimse yok. İleride bununla ilgili kapsamlı bir ilan oluşturabilirim.

Çalışmamın tüm aşamalarında gerek fikir, gerek destek, gerek anlık sohbet olarak yükümü hafifleten ve katkısını yadsıyamayacağım dostum, kardeşim @Cry'a teşekkür ederim.

__________________
 
 

Yer İmleri


Şu anda bu konuyu görüntüleyen etkin kullanıcılar: 1 (0 üye ve 1 konuk)
 

Yayınlama Kuralları


Forum saati GMT +3 olarak ayarlanmıştır. Şu an saat: 17:20

Forum
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
IRCdForum.Net, lisanslı vBulletin® kullanmaktadır.
Yasal Uyarı
IRCdForum.Net; 5651 sayılı kanuna göre yer sağlayıcı bir forum sitesidir. Dolayısıyla forumdaki içeriklerden ilgili içeriği paylaşan üyeler sorumludur. Hukuka aykırı içerik bildirimleri için İLETİŞİM linkinden bildirim gönderebilirsiniz.

güzel hosting

IRCdForum.Net; altyapı gücünü Güzel Hosting'den alır.