PHP tamamen beyaz bir sayfa, hiçbir hata, günlükleri, ya da başlıkları üretir.

11 Cevap php

Benim özel WAMP PC'de bazı PHP kodu çalışırken aniden sunucudan boş bir yanıt alıyorum - yanıt aslında. Hayır başlıkları, hiçbir veri, PHP hata günlükleri, nada hiçbir şey. Apache ve PHP başladı ancak yine de hiçbir şey. Ben sadece iyi diğer PHP komut erişebilirsiniz çünkü php çalışma olduğunu biliyorum.

Kundakçı hiçbir başlıklarını raporları,? bayt, ve sadece alır 163ms "yük" (yani bir zaman aşımı değil) için. Ben hızlı bellek tüketimi düşündüm - ama benim PC hafıza izlenir ve herhangi bir ani gösteren değil. Hatalar ve İstisnalar şimdiye kadar gayet iyi çalışıyor.

Dünyada ne?

max_execution_time = 30 ;
max_input_time = 60 ; 
max_input_nesting_level = 64 ; 
memory_limit = 500M ;

error_reporting = E_ALL | E_NOTICE | E_STRICT
display_errors = On
log_errors = On

: EDIT:

Ben bir on-ayak-kutuplu @ dokunma olmaz. Ben programcıları PHP düşeceği böylece yakut adamlar var o atmak düşünüyorum.

Her neyse, ben XDebug etkin ve çıkış herhangi bir eziyet dosyaları vermedi. Sonra zombat tavsiye aldı ve sayfanın üst kısmında bir DIE () yerleştirilir ve çalıştı. Ben sadece tamamen PHP öldürür bazı very weird kodu var sanırım. Hataları özürlü veya @ Hala boş içerikli sunucudan bir başlık geri almak gerekir ile bastırılmış olsa bile!

Ben daha bulursam ben geri göndeririz.

11 Cevap

Ben bu sorunun cevabını tahmin - PHP 5.2.5 özyinelemeli ölüm işleyemez çıkıyor.

<?php

class A
{
    public function __construct()
    {
    	new B;
    }
}

class B 
{
    public function __construct()
    {
    	new A;
    }
}

new A;

print 'Loaded Class A';

Hayır başlıkları, hataları, içerik, günlükleri, xdebug döker, hafıza kramponları, CPU kramponları, sunucu çöküyor, ya da bir şey. Yaklaşık 150ms PHP sonra, sadece "biter". Tuhaf.

Sen hata raporlama değiştirilmiş olan bu dizinde bir. Htaccess dosyası olabilir.

Test etmek için, açıkça sana sorun veriyor senin php script üstündeki bu ayar seçenekleri deneyin.

ini_set('display_errors',1);
error_reporting(E_ALL);

Ben de aşırı gayretli bir anti-virüs paketleri neden bu gördüm. Bazı internet ve e-posta filtresi web proxy yazılımı içerir. Bu durumda, sayfa sadece sonsuzluğa yük devam ama tam asla.

Eğer @ PHP olacak sessizce çıkış ile bir hat üzerinde bir sözdizimi hatası varsa, @ (hata bastırma) operatörü sakının.

Bu durumu tespit set_error_handler kullanmak ve kendi hata işleyicisi yazmak için, yine @ kullanılan hataları denilen alırsınız.

Bir konsoldan sayfasını çalıştırın ve hata mesajı alırsınız.

// nix
php yourFile.php

// Windows
c:\path\to\php.exe yourFile.php

Diğer PHP betikleri çalıştıklarını söylüyorlar, böylece muhtemelen bir Apache bir sorun olmadığını gösteriyor. Ayrıca, tüm günlük ayarlarının doğru olması için görünür, ve hiçbir şey günlüğe oluyor, bu yüzden bir şey çıkışları önce PHP normal çıkarken oldukça mümkündür. Aşağıdakilerden biri doğru olabilir:

  • Bir yanlış exit() deyimi? Sen kodu çalışıyorlardı, belki ekledi hızlı exit() şey kontrol ve kaldırmak için unuttum?
  • herhangi bir hata iletileri bastırır @ operatörü kullanımı için kontrol don.neufeld 'nin fikri, geçmişte bana ayıklama zaman saat maliyeti vardır. Kesinlikle aramak için bir şey.

Bu gibi durumlarda, yoksul adamın ayıklama yaklaşımı biraz hızlı sonuçlar verebilir. Burada söz konusu komut satırında ilk olarak bir exit('wtf'); atmak. Bu çalışıyor mu? Bu testin sonuçları hemen olursa olsun sonuç ne her türlü imkanı dışladı. Eğer herhangi bir çıktı alamıyorsanız, o halde herhangi bir üst düzey tamponlama dikkatli olun, muhtemelen sunucu düzeyinde problem (yapılandırma, kötü modülü, vb) bulunuyor. Eğer çıktı almak yaparsanız, o zaman sunucu gayet iyi biliyorum, ve sorun, exit() durulayın ve tekrar, birkaç satır aşağı çağrı hareket hangi durumda, sizin komut derin yatıyor. Değil zarif bir ayıklama yolu, ama hızlı ve kirli, ve muhtemelen birkaç dakika içinde sorunu bulacaksınız.

Burada büyük olasılıkla şey apache çökmesini olmasıdır. Belki apache hata günlüğüne bakmak, ya da bir hata ayıklayıcı eklemek.

Windows üzerinde apache / php işlem hata ayıklama seyir Detaylar http://bugs.php.net/bugs-generating-backtrace-win32.php bulunabilir

Olay Günlüğü'nü denetleyin.

Açık veya short_open_tag = Kapalı = short_open_tag için php.ini ayarını kontrol edin

Bu durumda, bu kod mümkün olduğunca dışarı kesme ve göstermek için sayfada bir şey olsun eğer görülmeye değer genellikle.

Bu kod bir kapanmamış alıntı yerde, ya da kapanmamış ayracı nedeniyle olabilir. Bu yankı deyimi metin veya başka bir işlev, vb izlendi neden olabilir

Tüm hatalar rapor ediliyor ÖNERİ ederken, ben değil, tüm hataları aslında muhtemelen çünkü benim ulaşamayacağı paylaşılan bir bilgisayar ini ayarları, rapor bulduk.

Emin neden değil - out yorumlarında her zaman yeterli değildir. Bu durumda ben hatayı bulana kadar, ben aptal bir yazım hatası için kendimi tekme hangi sonra, genellikle sadece sayfayı kopyalamak için hızlı buluyorum, ve yavaş yavaş macun bölümleri geri kesti.

PHP kodu hata ekranı etkinleştirmek için eğer bir şey, insert görmüyorum

ini_set('display_errors',1); 
error_reporting(E_ALL);

Bu potentialy size çok zaman kazandırır Örnek:

Bir joomla default.php şablon dosyasında bu kod hatları 20 ve 21 olmadan hiçbir hata msj ile boş bir sayfa görüntüler

17  <?php if ($params->get('title_article_linkable')) { ?>
18      <a href="<?php 
19          $url = JRoute::_(ContentHelperRoute::getArticleRoute($item->id,$item->catid));
20          ini_set('display_errors',1);
21          error_reporting(E_ALL);
22          echo $url; ?>">
23      <?php echo $this->item->title; ?></a> // should be $item->title !!
24  <?phpLL000000 } else { ?>
25      <?php echo $item->title; ?>
26  <?php } ?>

Çıktı:

enter görüntü açıklaması here

Eğer ?> kapatma etiketleri için dosyaları kontrol etmedi? Ya onlardan sonra daha da önemlisi herhangi bir boşluk ...