PHP Güncellemesi Neden Gereklidir ve Hangi Riskleri Taşır?
PHP güncellemesi, sitenizin güvenliğini ve performansını korumak için en önemli adımlardan biridir. PHP 5.6 veya 7.0 gibi eski sürümler artık güvenlik desteği almaz ve hackerlar bu sürümlerdeki güvenlik açıklarından kolayca yararlanabilir. Ayrıca, PHP 8.1 ve 8.2 gibi yeni sürümler, önceki sürümlere göre %30'a kadar daha hızlıdır ve JIT (Just-In-Time Compilation) ve typed properties gibi modern özellikler sunar.
Ancak plansız bir PHP güncellemesi sitenizi çalışmaz hale getirebilir. Özellikle WordPress, Joomla veya Drupal gibi içerik yönetim sistemlerindeki (CMS) birçok eski kod, yeni sürümlerde kaldırılmış olan kullanımdan kaldırılmış (deprecated) işlevleri kullanır. Örneğin, mysql_connect() işlevi PHP 7.0'da kaldırılmış ve yerini mysqli_connect() veya PDO almıştır. Siteniz hala bu işlevi kullanıyorsa, ölümcül hata (Fatal Error) ile karşılaşır.
Bu makalede, uyumluluk kontrolü, test ortamı oluşturma, yedekleme ve sorun durumunda hızlı geri dönüşü içeren adım adım bir PHP güncelleme süreci sunuyoruz. Bu adımları izleyerek PHP güncellemesini minimum riskle gerçekleştirebilirsiniz.
Adım 1: Kod ve Eklenti Uyumluluğunu Kontrol Etme
Herhangi bir işlem yapmadan önce, kodlarınızın yeni PHP sürümüyle uyumlu olup olmadığını bilmelisiniz. Bunu otomatik veya manuel araçlarla yapabilirsiniz.
Çevrimiçi ve Komut Satırı Araçlarını Kullanma
WordPress için PHP Compatibility Checker aracı, tema ve eklenti dosyalarının tamamını tarayan ve uyumluluk sorunlarını raporlayan ücretsiz bir eklentidir. Özel projeler için, PHPCompatibility standardı ile PHP_CodeSniffer komut satırı aracını kullanabilirsiniz:
# PHP_CodeSniffer ve PHPCompatibility standardını yükleme
composer global require "squizlabs/php_codesniffer=*"
composer global require "phpcompatibility/php-compatibility"
# Proje klasöründe tarama çalıştırma
phpcs --standard=PHPCompatibility --runtime-set testVersion 8.1 /path/to/your/project
Bu komut tüm PHP dosyalarını kontrol eder ve kaldırılmış işlevlerin kullanımı, uyumsuz veri türleri ve işlev davranışlarındaki değişiklikler gibi hataları gösterir. Örneğin, kod each() işlevini kullanıyorsa (PHP 8.0'da kaldırılmıştır), bir uyarı alırsınız.
Üçüncü Taraf Eklentileri ve Kütüphaneleri Kontrol Etme
Bir CMS kullanıyorsanız, eklentilerinizi ve temalarınızı mutlaka güncelleyin. Birçok geliştirici, PHP 8.x ile uyumluluk için yeni sürümler yayınlamıştır. Örneğin, WordPress 6.0 ve sonrası PHP 8.0 ve 8.1 ile tamamen uyumludur. Ancak eski eklentiler hala sorunlu olabilir. WordPress yönetim panelinde (Araçlar > Site Sağlığı) uyumsuz eklentilerin listesini kontrol edin.
Yaygın hata: Birçok yönetici, CMS'yi güncellemenin tüm sorunları çözeceğini düşünür. Ancak üçüncü taraf eklentiler güncellenmemiş olabilir. Eklentileri her zaman ayrı ayrı test edin.
Adım 2: İzole Bir Test Ortamı Oluşturma
PHP güncellemesini asla doğrudan ana site (production) üzerinde yapmayın. Ana siteyle tamamen aynı olan bir test ortamı (staging) oluşturun. Bu, bozulma endişesi olmadan değişiklikleri test etmenizi sağlar.
Docker ile Test Ortamı Kurulumu
Test ortamı oluşturmanın en basit yolu Docker kullanmaktır. Yeni PHP sürümüyle bir docker-compose.yml dosyası oluşturun:
version: '3.8'
services:
web:
image: php:8.1-apache
ports:
- "8080:80"
volumes:
- ./your-site:/var/www/html
environment:
- MYSQL_HOST=db
- MYSQL_USER=testuser
- MYSQL_PASSWORD=testpass
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=rootpass
- MYSQL_DATABASE=testdb
- MYSQL_USER=testuser
- MYSQL_PASSWORD=testpass
Ardından docker-compose up -d komutuyla ortamı başlatın. Site dosyalarınızı your-site klasörüne yerleştirin ve http://localhost:8080 üzerinden erişin.
Alt Alan Adı veya Alt Dizin Kullanma
Docker'a erişiminiz yoksa, test.yourdomain.com gibi bir alt alan adı oluşturabilir ve yalnızca bunun için yeni PHP sürümünü etkinleştirebilirsiniz. Paylaşımlı hostinglerde, genellikle cPanel veya DirectAdmin üzerinden her alan adı için PHP sürümünü ayrı ayrı ayarlayabilirsiniz. Örneğin, cPanel'de "Select PHP Version" bölümüne gidin ve test alt alan adı için sürüm 8.1'i seçin.
Önemli not: Ana veritabanının bir kopyasını test ortamına mutlaka import edin. Yedekleme için mysqldump ve geri yükleme için mysql komutlarını kullanın:
# Ana veritabanından yedekleme
mysqldump -u username -p main_database > backup.sql
# Test veritabanına geri yükleme
mysql -u testuser -p test_database < backup.sql
Adım 3: Tam Performans Testi ve Hata Düzeltme
Test ortamını kurduktan sonra sitenin tüm bölümlerini kontrol edin. Bunu manuel ve otomatik olarak yapın.
Ana Sayfaların Manuel Testi
Aşağıdaki sayfaları gezintiye çıkarın ve hatasız görüntülendiklerinden emin olun:
- Ana sayfa ve iç sayfalar
- İletişim, kayıt ve giriş formları
- Yönetim sayfaları (admin panel)
- Ödeme süreci ve alışveriş sepeti (e-ticaret sitelerinde)
Ayrıca, PHP hatalarını loglarda kontrol edin. Test ortamında hata görüntülemeyi etkinleştirin:
// php.ini dosyasında veya scriptin başında
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
PHPUnit ile Otomatik Test
Projenizde birim testler (unit tests) varsa, bunları yeni PHP sürümüyle çalıştırın. Örneğin:
cd /path/to/your/project
phpunit --configuration phpunit.xml
Bu, ana işlevlerin sorunsuz çalışmasını garanti eder. Bir test başarısız olursa, hatayı düzeltin ve testi tekrar çalıştırın.
Yaygın Sorunları Giderme
PHP güncellemesinin en yaygın sorunları şunlardır:
- Kaldırılmış işlevlerin kullanımı:
create_function()(PHP 7.2'de kaldırıldı) veyaeach()(PHP 8.0'da kaldırıldı) gibi. Bu işlevleri modern karşılıklarıyla değiştirin. - Veri türlerindeki değişiklik: PHP 8.0'da varsayılan veri türleri daha katı hale gelmiştir. Örneğin, bir işlev
intbekliyorsa ve sizstringgönderirseniz, TypeError hatası alırsınız. - PHP uzantılarıyla ilgili sorunlar:
mcryptgibi bazı uzantılar PHP 7.2'de kaldırılmıştır. Bunun yerineopensslveyasodiumkullanın.
Yaygın hata: Bazı yöneticiler yalnızca ana sayfayı test eder ve diğer bölümleri ihmal eder. Tüm kullanıcı akışlarını (user flows) mutlaka kontrol edin.
Adım 4: Tam Yedekleme ve Geri Dönüş Planlaması
Değişiklikleri ana siteye uygulamadan önce tam bir yedekleme yapın. Bu, dosyaları ve veritabanını içerir.
Dosya ve Veritabanı Yedekleme
Yedekleme için aşağıdaki komutları kullanın:
# Dosyaları yedekleme (tar kullanarak)
tar -czf site-backup-$(date +%Y%m%d).tar.gz /path/to/your/site
# Veritabanını yedekleme
mysqldump -u username -p --all-databases > db-backup-$(date +%Y%m%d).sql
Bu dosyaları güvenli bir yerde (örneğin, bulut depolama veya ayrı bir sabit disk) saklayın.
Hızlı Geri Dönüş Planı (Rollback Plan)
PHP güncellemesinden sonra siteniz bozulursa, 5 dakikadan kısa sürede önceki sürüme dönebilmelisiniz. Aşağıdaki adımları önceden hazırlayın:
- Sunucuda önceki PHP sürümünü tutun (örneğin, PHP 7.4 ve PHP 8.1 her ikisi de yüklü olsun).
- PHP sürümünü değiştirmek için basit bir script yazın. Örneğin, PHP-FPM ile Nginx sunucularında:
# PHP 8.1'den PHP 7.4'e geçiş
sudo update-alternatives --set php /usr/bin/php7.4
sudo systemctl restart php7.4-fpm
sudo systemctl restart nginx
Ayrıca, paylaşımlı hosting kullanıyorsanız, yönetim panelinde genellikle PHP sürümünü değiştirme seçeneği bulunur. Bu seçeneği önceden belirleyin.
Önemli not: Siteniz Redis veya Memcached kullanıyorsa, geri dönüşten sonra eski verilerin karışmasını önlemek için önbelleği temizleyin.
Adım 5: PHP Güncellemesini Ana Sitede Uygulama
Test ortamında uyumluluktan emin olduktan sonra, PHP güncellemesini ana sitede uygulama zamanı gelir. Bunu düşük trafikli bir zamanda (örneğin, gece yarısı) yapın.
Değişiklikleri Adım Adım Uygulama
Öncelikle siteyi bakım moduna alın, böylece kullanıcılar hatalarla karşılaşmaz. WordPress'te "WP Maintenance Mode" gibi eklentiler kullanabilirsiniz. Ardından PHP sürümünü değiştirin:
- Sanal sunucularda (VPS):
update-alternativeskomutunu veya.htaccessdosyasını (Apache için) değiştirin. - Paylaşımlı hostingde: Yönetim panelinden (cPanel veya DirectAdmin) ana alan adı için PHP sürümünü değiştirin.
Değişiklikten sonra siteyi bakım modundan çıkarın ve hemen performansını kontrol edin. Her şey yolundaysa işlem tamamdır.
Güncelleme Sonrası Logları Kontrol Etme ve Sorunları Giderme
Tam testten sonra bile küçük hatalar ortaya çıkabilir. PHP hata loglarını kontrol edin:
tail -f /var/log/php_errors.log
Bir hata görürseniz, düzeltin. Örneğin, bir eklenti strftime() işlevini kullanıyorsa (PHP 8.1'de kullanımdan kaldırılmıştır), bunu date() ile değiştirebilirsiniz.
Yaygın hata: Bazı yöneticiler güncellemeden sonra siteyi terk eder. En az 24 saat boyunca logları izleyin.
Sonuç: PHP Güncellemesini Güvenle Yapmak
PHP güncellemesi hassas bir süreçtir, ancak yukarıdaki adımları izleyerek siteyi bozmadan gerçekleştirebilirsiniz. Adımların özeti:
- PHP_CodeSniffer gibi araçlarla kod ve eklenti uyumluluğunu kontrol edin.
- İzole bir test ortamı (Docker veya alt alan adı ile) oluşturun.
- Sitenin tüm bölümlerini test edin ve hataları düzeltin.
- Tam yedekleme yapın ve hızlı geri dönüş planı oluşturun.
- Güncellemeyi düşük trafikli bir zamanda yapın ve logları izleyin.
Sunucunuzu yönetmek için profesyonel bir çözüm arıyorsanız, ServerNet farklı PHP sürümlerini destekleyen web hosting hizmetleri sunar ve PHP güncelleme sürecini sizin için kolaylaştırabilir. Ancak en önemli nokta, herhangi bir değişiklikten önce her zaman yedekleme yapmak ve bir test ortamına sahip olmaktır. Bu yöntemle PHP güncellemesi sadece riskli olmakla kalmaz, aynı zamanda sitenizin güvenliğini ve performansını da artırır.
Yorumlar 0
Henüz yorum yok — ilk siz olun!