Ölüm PHP'nin beyaz ekran

15 Cevap php

Şimdi geri PHP içine almaya başlıyorum ki, ben ilk etapta vazgeçti neden hatırlamaya başlıyorum. Şu anda benim plaka üzerinde en sinir bozucu şey "ölüm PHP'nin beyaz ekranda" terimine geldim budur. PHP nedeniyle sözdizimi ya da ne olursa olsun bir ölümcül hata aldığında her zaman aslında tarayıcıya hiçbir şey göndermeden ölecek gibi görünüyor. Benim .htaccess için aşağıdaki ekledik ve çoğu zaman iş gibi görünüyor, ancak bu durumda çalışmaz.

php_value display_errors 1
php_value display_startup_errors 1
php_value error_reporting 2147483647 # E_ALL

Ben bir şey eksik? Ben bir hata yapmak ve küçük bir hata yaptım ki izini çalışan birçok sayfaları aracılığıyla aramak zorunda diye ben yazmak kod yenileme her birkaç satır vurmak gerekiyor gibi şu anda ben hissediyorum ...

EDIT: Örneğin, aşağıdaki kod iki satır Verilen:

$foo = array(':language' => $languageId;
$foo = array(':language' => $languageId);

İlk ölüm beyaz ekran sergileyecek (yani, tüm basılı tarayıcınıza şey), ikinci mutlu yürütmek olurken.

15 Cevap

Hatalar ve uyarılar genellikle görünür .... \ logs \ php_error.log ya .... \ logs \ apache_erroe.log php.ini ayarlarına bağlı.

Ayrıca kullanışlı hataları sık sık tarayıcısı yönlendirilir, ama onlar geçerli html değil onlar gösterilmez.

Yani "tail-f" log dosyaları ve boş bir ekran kullanımı IE'ler "view" olsun -> "kaynak" menü seçenekleri ham çıkışını görüntülemek için.

Ben her zaman php script çok üstünde bu sözdizimi kullanıyorum.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off

Yardımcı olacaktır eğer bilmiyorum, ama burada php projelerim için standart yapılandırma dosyasının bir parçasıdır. Ben bile kendi sunucusunda apache biçimlendirimleri çok fazla bağımlı değil eğilimindedir.

Ben kaybolan hata sorunu asla, belki burada bir şey size bir fikir verecektir.

** APPLICATON_LIVE göstermek için düzenlenmiş **

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}


/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}

Aşağıdaki kodu tüm hataları görüntülemek gerekir:

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

Eğer kapatma işleyicisi bir hata var, bu kod ile boş bir sayfa oluşturmak için tek yoldur. Ben kopyalanan ve test olmadan kendi cm den bu yapıştırılan, ama çalıştığını eminim.

Gerçek php dosyalarında hata raporlama seviyesini ayarlamayı deneyin. Ya da, diğerleri de söylediğim gibi, sunucu ayarlarını kontrol - host ilişkin olarak php.ini şey, ya da kısıtlama olabilir. Sadece. Htaccess güvenmeyin. Giderirken, Ayrıca, balık düşündüğünüz herhangi bir değişken print_r.

Bazı uygulamalar böyle bir şey arayarak, bu talimatlar kendilerini idare yapın:

error_reporting(E_ALL & ~E_DEPRECATED); or error_reporting(0);

Ve böylece. Htaccess ayarlarını geçersiz kılma.

kodunuzu @inexistent_function_call(); kullanarak intepreter sessizce ölür ve komut dosyası ayrıştırma iptal neden olur. Geçersiz fonksiyonları için kontrol edin ve hata-baskılayarak operatörü (@ karakter) kullanmak için değil denemelisiniz

open your php.ini, make sure it's set to:

display_errors = On

Sunucunuzu yeniden başlatın.

Durumları ve hataları yakalamak ve bunları bir dosyaya oturum açmayı deneyin.

PHP aslında 'display_errors'. Htaccess ayarını toplayıp emin misiniz? Emin olmak için phpinfo() fonksiyonunun çıkışını kontrol edin.

Ayrıca, '... @ include' emin kullanılan varsa '@', bu hataları susturmak olabilir kullanmış değil emin olmak için kontrol etmelisiniz veya '@ some_function (...) 'bir yere yığın izleme kadar.

Her ayar herhangi kullanmak ki doğru ise set_error_handler() diyorsun?

set_error_handler() işlevi PHP bu gibi davranmaya yapabilirsiniz.

Bu komut anında durdurmak çünkü ölümcül hataları işleyemez.

çıktı tamponlama kullanıyorsunuz? bazen php bir hata durumunda tampon temizleme değil ve sadece beyaz bir ekran olsun

Hata PHP kodu ise, tüm rapora ayarlamak için kodu içinde error_reporting () işlevini kullanabilirsiniz.

PHP çöküyor Ancak, bu durumu idare etmez. Bu konuda bilgi sunucu günlüklerinde kullanılabilir. Belki bu erişiminiz yok, ama birlikte çalıştığım birçok barındırma sağlayıcıları bunu erişmesine izin için bir yol var. Örneğin, ben iyi gibi yaklaşım. Php bulunduğu geçerli dizinde hatalar.log dosyası oluşturur olmasıdır. Orada arama deneyin veya bu konuda barındırma sağlayıcınıza başvurun.

Ben de bu tür hataları gördük zaman fastcgi_params veya fastcgi.conf config dosyası düzgün sunucu yapılandırmasında dahil değildir. Yani benim için düzeltme bir aptal oldu:

include /etc/nginx/fastcgi_params;

Öğrenmek için bana bir hour aldı ...

I received white screen from an applications running Smarty template engine. Clearing the cache in templates_c solved the problems.

Ben (hiçbir şey bulunamadı) hata günlükleri PHP / Apache hatalar için yarım saat arama kaybettikten sonra bu yaptım.