Beyaz ölüm ekranını aldığımda hata mesajlarını nasıl görebilirim?


25

Üzerinde çalıştığım site beyaz ekrana geçtiğinde hata mesajlarını nasıl görebilirim?

Yanıtlar:


33

Bunu settings.php dosyasının en altına yerleştirin:

error_reporting(-1);  // Have PHP complain about absolutely everything 
$conf['error_level'] = 2;  // Show all messages on your screen, 2 = ERROR_REPORTING_DISPLAY_ALL.
ini_set('display_errors', TRUE);  // These lines just give you content on WSOD pages.
ini_set('display_startup_errors', TRUE);

Canlı siteler için /var/log/apache2/error.log tercih etmeme rağmen bu, geliştirme siteleri için harika. Bu olsa çalışır. :)
Citricguy

17

Drupal.org'daki Beyaz Ölüm Ekranı (Tamamen Boş Sayfa) kaynağı, hata mesajını ve bunlara yol açan genel sorunları görmek için size adım adım yol gösterecektir.

"Görünmez" Hataları

Hata bildirimi kapalıysa, önemli bir hatayla karşılaşıyor olabilirsiniz ancak göremiyor olabilirsiniz. Bir üretim sitesinde, hata raporlamanın kapatılması yaygındır. Bu durumda ve PHP kurtarılamaz bir hataya ulaştıysa, ne bir hata ne de bir içerik görüntülenmez, bu nedenle tamamen boş bir sayfa elde edersiniz.

Bununla ilgili yapabilecekleriniz ya PHP hata raporlamasını açmaktır, böylece sayfanın kendisinde bir mesaj görüntüler ya da hatayı aramak için günlük dosyalarınızı kontrol edin (sunucudan). Her ikisinin de nasıl yapılacağı aşağıda açıklanmıştır.

Hata Raporlamayı Etkinleştir

Ticari ana bilgisayarlarda ve üretim sitelerinde (iyi nedenlerden dolayı, kullanıcıların hataları görmemesi için) kapatılmış olmasına rağmen, bu hatalar sorun giderme için en iyi araçlardan biridir. Hata raporlamayı etkinleştirmek için, ilk açılış PHP etiketinden hemen sonra index.php dosyanızı (normal olarak kök dizinde bulunur) geçici olarak düzenleyin (asıl dosya bilgisini düzenlemeyin!):

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

Şimdi doğrudan ekranda meydana gelen hataları görebileceksiniz. Bellek sorunları hala gösterilmeyebilir, ancak bu bir eleme sürecindeki ilk adımdır.

Çok siteli bir kurulum kullanıyorsanız ve yalnızca bir site için hataların görünmesini istiyorsanız, önce olduğu gibi ana bilgisayarın adını kontrol edin:

if ($_SERVER['HTTP_HOST']==='some.domain.name.here') {
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
}

Update.php çalışırken bir metin editöründe update.php açıp aşağıdaki satırı açmadan sorun oluşursa:

ini_set('display_errors', FALSE);

10

Apache hata günlüğüne bir göz atın, içinde bulunduğu Ubuntu'da /var/log/apache2/error.logşunları yapabilirsiniz:

tail -f /var/log/apache2/error.log

2
sudo tail -f /var/log/apache2/error.log
Citricguy

1
Eğer bunların her biri için özel günlük dosyaları ile pek vhosts varsa, sadece bu kullanın: daha sonra /var/log/apache2/*.log sayfayı yenileyin -f sudo kuyruğu olduğunu wsod ile biter
izus

2

drushÖrneğin tüm siteyi çalıştırarak WSOD hatalarını izlemenin kolay bir yolunu buldum :

drush rs

Bundan sonra siteye verilen yeni adresten (örn. 127.0.0.1:8080) Erişin , sonra sorunu yeniden oluşturmaya çalışın; terminal ekranındaki tüm hataları göreceksiniz. display_errorsPHP'nizi , özellikle başarısız olduğunda (örn. MAMP) yeniden yapılandırmanıza gerek yoktur .


Diğer zor yolla, hata ayıklayıcıları kullanarak buldum, örneğin:

  • OS X:

    sudo dtruss -fn httpd 2>&1 | grep -i error
  • Linux:

    sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error

    Not: Değişim httpdiçine phpkullandığınız takdirde drush rsyukarıdaki gibi.

Veya XDebugPHP eklentisini yükleyerek bir izleme dosyası ( xdebug.auto_trace=1) oluşturun.


1
Siz bayım, bir hayat kurtarıcısınız. Değişen php ayarlarının hiçbiri saçmalık benim için işe yaramadı, ama bu hile yaptı!
Greg Somers,

1

Drush kullanıyorsanız, drush-ws komutunu kullanarak hata mesajları görebilirsiniz.


0

$ Update_free_access değişkenini FALSE değerinden TRUE olarak değiştirdim ve update.php dosyasını çalıştırdım. Sorunumu çözdü.


0

İndex.php dosyasını değiştirebilir ve kodu bir try / catch ile kaplayabilirsiniz. Bunun gibi:

try {
    define('DRUPAL_ROOT', getcwd());
    require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
    menu_execute_active_handler();
} catch (Error $t) {
    error_log('Error at Line:' . $t->getLine() . ' File: ' . $t->getFile() . ' Message:' . $t->getMessage() );
    print '<div>Message: ' . $t->getMessage() . '</div>';
    print '<div>File:' . $t->getFile() . '</div>';
    print '<div>Line:' . $t->getLine() . '</div>';
}

Hata mesajı, hataya neden olan dosyayı ve kod satırını gösterir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.