«Fatal error: Class not found» hatasını görüyorsunuz ve hosting üzerinde hangi PHP eklentisinin aktif olduğunu bilmiyorsunuz
Script'iniz Class 'IntlDateFormatter' not found veya Call to undefined function mysqli_connect() hatası veriyor. WordPress beyaz ekran gösteriyor ve hata günlüğü PHP Fatal error: Uncaught Error: Call to undefined function işaret ediyor. Destek ekibiyle iletişime geçmeden önce, hosting'inizde tam olarak hangi eklentilerin aktif olduğunu ve hangilerinin eksik olduğunu bilmelisiniz. Bu makale tam inceleme yöntemini gösterir.
phpinfo() dosyası; aktif eklentilerin listesini görmenin en hızlı yolu
info.php adında bir metin dosyası oluşturun ve içine şu üç satırı koyun:
<?php
phpinfo();
?>
Dosyayı public_html klasörüne yükleyin ve tarayıcıda https://yourdomain.com/info.php adresini açın. Çok sayıda tablo içeren uzun bir sayfa göreceksiniz. PHP Credits bölümünü yok sayın. Configure Command bölümünü arayın; çıktısı şuna benzer:
'./configure' '--with-mysqli' '--with-curl' '--enable-gd' '--with-openssl'
Bu satır, PHP derlenirken hangi eklentilerin aktif olduğunu gösterir. Ancak tüm eklentiler bu şekilde derlenmez; opcache ve Zend OPcache gibi bazıları ayrı olarak Loaded Configuration File ve Scan this dir for additional .ini files bölümlerinde görülür.
İncelemeden sonra dosyayı silin. İşte burada hata yaparlar: info.php dosyasını hosting'e koyarlar ve unuturlar. Bu dosya, yapılandırma dosyalarının yolu ve ortam değişkenleri dahil PHP yapılandırmasının tüm ayrıntılarını gösterir. Adresi tahmin eden herkes sunucunuzun tam haritasını görür. İşiniz bittikten sonra dosyayı silin.
Daha hızlı inceleme için komut satırı
SSH erişiminiz varsa, bu komut yüklenmiş tüm eklentilerin listesini verir:
php -m
Çıktı, her satırda eklenti adlarını içerir. Belirli bir eklentinin varlığını kontrol etmek için:
php -m | grep -i intl
Çıktı boşsa, eklenti kurulu değildir. PHP sürümünü ve yapılandırma dosyasının yolunu görmek için:
php -v
php --ini
php --ini komutu Loaded Configuration File yolunu ve Scan for additional .ini files klasörünü gösterir. Aktif eklentiler genellikle o klasörde ayrı bir .so dosyasına sahiptir.
SSH olmadan belirli bir eklentinin varlığını kontrol etme
Çoğu paylaşımlı hosting'in SSH erişimi yoktur. Bu durumda, phpinfo() dosyasını kullanın ve sonuç sayfasında Ctrl+F tuşlarına basıp eklenti adını arayın. Eklenti adı Configure Command bölümünde veya özel ayarları olan bağımsız bir bölüm olarak görünüyorsa, aktiftir.
İkinci yöntem: Bu içerikle bir test dosyası oluşturun:
<?php
var_dump(extension_loaded('intl'));
var_dump(function_exists('mysqli_connect'));
?>
bool(true) çıktısı eklentinin veya fonksiyonun mevcut olduğu anlamına gelir. bool(false) ise eksik olduğu anlamına gelir. Bu yöntem, phpinfo() içinde metin aramasından daha doğrudur, çünkü PDO gibi bazı eklentiler varsayılan olarak aktiftir ancak php -m çıktısında pdo_mysql gibi farklı bir adla görünür.
Kurulu eklenti ile aktif eklenti arasındaki fark
Bir eklenti sunucuda derlenmiş olabilir ancak php.ini dosyasında devre dışı bırakılmış olabilir. Satırın başındaki noktalı virgülle ;extension=intl.so satırı devre dışı olduğu anlamına gelir. Paylaşımlı hosting'de genellikle php.ini dosyasını değiştiremezsiniz, ancak cPanel gibi bazı kontrol panelleri Select PHP Version bölümünden PHP sürümü seçme ve eklentileri etkinleştirme izni verir. Bu seçeneğiniz varsa, ilgili eklentinin kutusunu işaretleyin ve kaydedin.
İşte burada hata yaparlar: Önceki hosting'de olan eklentinin yeni hosting'de de olduğunu varsayarlar
Gördüğüm en yaygın hata: Birisi siteyi eski hosting'den yeni hosting'e taşır ve script Fatal error: Uncaught Error: Call to undefined function mb_strlen() hatası verir. Önceki hosting'de mbstring eklentisi aktifti, yeni hosting'de değil. Dosyaları ve veritabanını taşımak PHP eklentileriyle hiçbir ilgisi yoktur. Her hosting'in kendi bağımsız yapılandırması vardır.
Bu sorunun belirtisi: Site önceki hosting'de sorunsuz çalışıyordu, yeni hosting'e taşındıktan sonra beyaz ekran veya 500 hatası veriyor. Hata günlüğü genellikle tanımlanmamış belirli bir fonksiyona veya sınıfa işaret eder. Çözüm: Önce yukarıdaki yöntemlerle hangi eklentinin eksik olduğunu kontrol edin, ardından yeni hosting'in destek ekibine talep oluşturun.
Hosting'de olmayan bir eklentiyi talep etme yolu
mysqli, curl, gd, mbstring, xml ve zip gibi yaygın eklentiler çoğu Linux hosting'de aktiftir. intl, imagick, redis veya sodium gibi daha az yaygın eklentiler olmayabilir.
Talep etmeden önce şunları kontrol edin:
- Eklenti gerçekten script'inizin çalışması için gerekli mi?
DomDocumentgibi bazı kütüphanelerin alternatifleri vardır. - PHP sürümünüz eklentiyle uyumlu mu? PHP 7.4 için derlenmiş bir eklenti PHP 8.2'de çalışmaz.
- Eklenti, hosting'inizin desteklenen eklentiler listesinde mi?
Talebi destek bileti üzerinden gönderin. Eklentinin tam adını, gereken PHP sürümünü ve ihtiyaç nedenini yazın. Script'inizin resmi dokümantasyonu varsa, bağlantısını da gönderin. Destek genellikle birkaç saat içinde yanıt verir, ancak imagick gibi ağır eklentilerin kurulumu servis yeniden başlatma gerektirebilir ve zaman alabilir.
İhtiyacınız acilse ve paylaşımlı hosting eklentiyi kuramıyorsa, iki seçeneğiniz var: PHP yapılandırması üzerinde tam kontrole sahip olduğunuz özel sunucuya yükseltme veya script'i mevcut eklentiyi kullanan bir kütüphaneye değiştirme. İlk seçenek maliyet gerektirir, ikinci seçenek zaman gerektirir. Eklentinin kritik olduğu ve projenin büyüdüğü durumlarda özel sunucuyu seçerim; yalnızca belirli bir fonksiyon eksik olduğunda kod değişikliği daha ucuzdur.
ServerNet Linux hosting'de eklentileri inceleme
ServerNet Linux hosting üzerinde mysqli, curl, gd, mbstring, xml, zip ve opcache gibi temel eklentiler varsayılan olarak aktiftir. Ayrıntılı listeyi görmek için yukarıda açıklanan phpinfo() yöntemini kullanın. Listede olmayan bir eklentiye ihtiyacınız varsa, destek bileti oluşturun ve eklentinin tam adını yazın. Yaygın eklentiler genellikle aynı gün kurulur.
Talep etmeden önce ServerNet bilgi tabanı dokümantasyonunu kontrol edin; belki sorunuzun cevabı daha önce verilmiştir. Beyaz ekran hatasıyla karşılaşırsanız, WordPress ve PHP'de beyaz ekran giderme rehberini okuyun. Sorunun DNS'ten kaynaklanıp kaynaklanmadığını kontrol etmek için DNS ve ağ kontrol aracını kullanın.
Karşılaştırma tablosu: PHP eklentisi inceleme yöntemleri
| Yöntem | Gerekli erişim | Doğruluk | Süre |
|---|---|---|---|
| phpinfo() | FTP veya dosya yöneticisi | Yüksek | 2 dakika |
| php -m | SSH | Çok yüksek | 30 saniye |
| extension_loaded() | FTP veya dosya yöneticisi | Çok yüksek | 3 dakika |
| cPanel'de Select PHP Version bölümü | cPanel | Orta | 1 dakika |
php -m yöntemi en doğrudur çünkü doğrudan PHP motoruna sorar. phpinfo() yöntemi daha fazla bilgi verir ancak okunması daha zordur. extension_loaded() yöntemi belirli bir eklentiyi test etmek için doğrudur ancak tam liste için uygun değildir.
Genellikle eksik olan yaygın kullanılan eklentiler
Deneyime göre, bu eklentiler en çok kurulum talebi alır:
intl— uluslararasılaştırma ve tarih/sayı biçimlendirme için. WordPress ve WooCommerce bunu gerektirir.imagick— GD'den daha yüksek kaliteli görüntü işleme. Görsel odaklı siteler için gereklidir.redis— nesne ve oturum önbelleği. WordPress, Redis Object Cache ile daha hızlı olur.sodium— modern şifreleme. Bazı güvenlik kütüphaneleri bunu gerektirir.bcmath— keyfi hassasiyetli hesaplamalar. Ödeme ağ geçitleri ve finansal hesaplamalar için gereklidir.
Script'iniz bu eklentileri kullanıyorsa ve hata veriyorsa, önce eklentinin gerçekten eksik mi olduğunu yoksa yalnızca PHP sürümünün mü sorun olduğunu kontrol edin. Fatal error: Uncaught Error: Call to undefined function hatası, fonksiyonun hiç var olmadığı anlamına gelir. Deprecated: Function hatası, fonksiyonun var olduğu ancak PHP sürümünün çok yeni olduğu ve kodu güncellemeniz gerektiği anlamına gelir.
Sık sorulan sorular
Hosting'imde hangi PHP eklentilerinin aktif olduğunu nasıl anlarım?
<?php phpinfo(); ?> içeriğiyle bir info.php dosyası oluşturun ve tarayıcıda açın. SSH erişiminiz varsa, php -m komutu aktif eklentilerin tam listesini gösterir.
İhtiyacım olan eklenti hosting'de yok; nasıl talep edebilirim?
Destek bileti oluşturun ve eklentinin tam adını, PHP sürümünü ve ihtiyaç nedenini yazın. Yaygın eklentiler genellikle hızlı kurulur; ağır eklentiler daha uzun sürebilir.
Site yeni hosting'e taşındıktan sonra neden undefined function hatası veriyor?
Yeni hosting'deki PHP eklentileri önceki hosting'den farklı olabilir. Site dosyaları ve veritabanı taşınır ancak PHP yapılandırması taşınmaz. Yukarıdaki yöntemlerle hangi eklentinin eksik olduğunu kontrol edin ve kurulum talebi oluşturun.
Paylaşımlı hosting'de kendim PHP eklentisi kurabilir miyim?
Paylaşımlı hosting'de genellikle hayır, çünkü kök erişimi ve sunucu yapılandırma dosyalarını değiştirme gerektirir. Kontrol panelinizde Select PHP Version seçeneği varsa, bazı eklentileri kendiniz etkinleştirebilirsiniz. Aksi takdirde destek ekibine talep oluşturmanız veya özel sunucuya geçmeniz gerekir.