Bagaimana cara saya mendapatkan kesalahan PHP untuk menampilkan?

Saya telah memeriksa PHP saya init file (php.ini) dan display_errors diatur dan juga pelaporan kesalahan E_ALL. Saya restart Apache webserver.

Aku bahkan telah menempatkan garis-garis di bagian atas naskah saya, dan itu doesn't bahkan menangkap sederhana mengurai kesalahan. Sebagai contoh, saya mendeklarasikan variabel dengan "$" dan aku don't menutup pernyataan";". Tapi semua script saya tampilkan halaman kosong pada kesalahan ini, tapi aku ingin benar-benar melihat error di browser saya output.

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

Apa yang tersisa untuk dilakukan?

Mengomentari pertanyaan (3)
Larutan

Ini selalu bekerja untuk saya:

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

Namun, hal ini tidak't membuat PHP untuk menunjukkan kesalahan parse - satunya cara untuk menunjukkan kesalahan-kesalahan ini adalah dengan memodifikasi php.ini dengan baris ini:

display_errors = on

(jika anda don't memiliki akses ke php.ini, kemudian menempatkan baris ini dalam .htaccess mungkin bekerja terlalu):

php_flag display_errors 1
Komentar (17)

Anda dapat't menangkap mengurai kesalahan ketika mengaktifkan output kesalahan pada saat runtime, karena mem-parsing file sebelum benar-benar melaksanakan apa-apa (dan karena itu pertemuan kesalahan selama ini, itu tidak't melakukan apa-apa). Anda'll perlu mengubah sebenarnya konfigurasi server sehingga display_errors dan sesuai error_reporting tingkat digunakan. Jika anda don't memiliki akses ke php.ini, anda mungkin dapat menggunakan .htaccess atau serupa, tergantung pada server.

Pertanyaan akan memberikan info tambahan.

Komentar (1)

Dalam php.ini:

display_errors = on

Kemudian restart server web anda.

Komentar (5)

Untuk menampilkan semua kesalahan yang perlu anda:

1. Memiliki baris ini di script PHP anda're panggilan dari browser (biasanya index.php):

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

2.(a) memastikan bahwa script ini tidak memiliki kesalahan sintaks

—atau—

2.(b) Mengatur display_errors = On di php.ini

Jika tidak, itu bisa't bahkan menjalankan 2 garis!

Anda dapat memeriksa kesalahan sintaks dalam naskah anda dengan menjalankan (pada baris perintah):

php -l index.php

Jika anda termasuk script dari yang lain script PHP maka akan * menampilkan kesalahan sintaks dalam termasuk* script. Misalnya:

index.php

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

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';

my_script.php

adjfkj // This syntax error will be displayed in the browser
Komentar (0)

Beberapa penyedia web hosting memungkinkan anda untuk mengubah PHP parameter dalam .htaccess.

Anda dapat menambahkan baris berikut:

php_value display_errors 1

Saya memiliki masalah yang sama seperti milik anda dan ini solusi tetap.

Komentar (3)

Anda mungkin menemukan semua pengaturan untuk "kesalahan pelaporan" atau "display kesalahan" tidak muncul untuk bekerja di PHP 7. Itu adalah karena kesalahan penanganan telah berubah. Coba ini sebagai gantinya:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

Atau, untuk menangkap pengecualian dan kesalahan dalam satu pergi (ini adalah tidak kompatibel dengan PHP 5):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}
Komentar (10)

Ini akan bekerja:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>
Komentar (0)

Gunakan:

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

Ini adalah cara terbaik untuk menulis itu, tapi kesalahan sintaks memberi kosong output, sehingga menggunakan konsol untuk memeriksa kesalahan sintaks. Cara terbaik untuk men-debug kode PHP untuk menggunakan konsol; berjalan sebagai berikut:

php -l phpfilename.php
Komentar (0)

Set ini anda index.php file:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Komentar (0)

Buat file bernama php.ini dalam folder di mana file PHP anda berada.

Di dalam php.ini tambahkan kode berikut (saya memberikan sebuah kesalahan sederhana yang menunjukkan kode):

display_errors = on

display_startup_errors = on
Komentar (0)

Berikut ini adalah script PHP:

<?php
    ini_set("display_startup_errors", 1);
    ini_set("display_errors", 1);

    /* Reports for either E_ERROR | E_WARNING | E_NOTICE  | Any Error*/
    error_reporting(E_ALL);

    echo(abc); /* Notice: abc is an undefined constant */
?>

Untuk penjelasan yang lebih rinci dari kesalahan PHP, kunjungi Error PHP - error_reporting().

Komentar (2)

Jika, meskipun setelah semua jawaban diatas (atau anda dapat't mengedit php.ini file), anda masih dapat't mendapatkan pesan kesalahan, coba membuat file PHP baru yang memungkinkan pelaporan kesalahan dan kemudian memiliki masalah file. misalnya:

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');

Meskipun memiliki segalanya diatur dengan benar di php.ini file, ini adalah satu-satunya cara saya bisa menangkap sebuah namespace error. Saya skenario yang tepat adalah:

//file1.php
namespace a\b;
class x {
    ...
}

//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
    ...
}
Komentar (2)

Saya biasanya akan pergi dengan kode berikut ini di saya polos PHP proyek.

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT', 'DEVELOPMENT');
}

$base_url = null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url = 'http://localhost/product/';
            ini_set('display_errors', 1);
            ini_set('display_startup_errors', 1);
            error_reporting(E_ALL|E_STRICT);
            break;

        case 'PRODUCTION':
            $base_url = 'Production URL'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}
Komentar (0)

Ketika menggunakan PHP sebagai modul Apache, kita dapat mengubah pengaturan konfigurasi menggunakan petunjuk di file konfigurasi Apache (misalnya httpd.conf) dan .htaccess file. Anda akan perlu "AllowOverride Pilihan" atau "AllowOverride All" hak untuk melakukannya.

Cek ini

http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess

Komentar (0)

Seperti kita sekarang menjalankan PHP 7, jawaban yang diberikan di sini adalah tidak benar lagi. Satu-satunya yang masih OK salah satu dari Frank Forte, karena ia berbicara tentang PHP 7.

Di sisi lain, daripada mencoba untuk menangkap kesalahan dengan mencoba menangkap anda dapat menggunakan trik: gunakan seperti.

Berikut tiga buah kode:

File: tst1.php

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    // Missing " and ;
    echo "Testing
?>

Berjalan ini di PHP 7 akan menunjukkan apa-apa.

Sekarang, coba ini:

File: tst2.php

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    include ("tst3.php");
?>

File: tst3.php

<?php
    // Missing " and ;
    echo "Testing
?>

Sekarang jalankan tst2 yang menetapkan kesalahan pelaporan, dan kemudian termasuk tst3. Anda akan melihat:

Parse error: syntax error, unexpected end of file, mengharapkan variabel (T_VARIABLE) atau ${ (T_DOLLAR_OPEN_CURLY_BRACES) atau {$ (T_CURLY_OPEN) di tst3.php pada baris 4

Komentar (0)

Jika anda entah bagaimana menemukan diri anda dalam situasi di mana anda dapat't modifiy pengaturan melalui php.ini atau .htaccess anda're beruntung untuk menampilkan pesan kesalahan saat anda mengandung script PHP parse errors. Anda'd kemudian harus menyelesaikan linting file pada command line seperti ini:

find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"

Jika anda meng-host begitu dikunci sehingga tidak memungkinkan mengubah nilai melalui php.ini atau .htaccess, mungkin juga melarang mengubah nilai melalui ini_set. Anda dapat memeriksa bahwa dengan mengikuti script PHP:

<?php
if( !ini_set( 'display_errors', 1 ) ) {
  echo "display_errors cannot be set.";
} else {
  echo "changing display_errors via script is possible.";
}
Komentar (1)

Anda dapat melakukan sesuatu seperti di bawah ini:

Mengatur parameter di bawah ini di indeks utama file:

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);

Kemudian berdasarkan pada kebutuhan anda, anda dapat memilih yang anda ingin tampilkan:

Untuk semua kesalahan, peringatan dan pemberitahuan:

    error_reporting(E_ALL); OR error_reporting(-1);

Untuk semua kesalahan:

    error_reporting(E_ERROR);

Untuk semua peringatan:

    error_reporting(E_WARNING);

Untuk semua pemberitahuan:

    error_reporting(E_NOTICE);

Untuk informasi lebih lanjut, cek disini.

Komentar (2)

Anda dapat menambahkan anda sendiri custom error handler, yang dapat memberikan tambahan informasi debug. Selain itu, anda dapat mengatur untuk mengirim informasi melalui email.

function ERR_HANDLER($errno, $errstr, $errfile, $errline){
    $msg = "Something bad happened. [$errno] $errstr <br><br>
    File: $errfile <br>
    Line: $errline <br>
    <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";

    echo $msg;

    return false;
}

function EXC_HANDLER($exception){
    ERR_HANDLER(0, $exception->getMessage(), $exception->getFile(), $exception->getLine());
}

function shutDownFunction() {
    $error = error_get_last();
    if ($error["type"] == 1) {
        ERR_HANDLER($error["type"], $error["message"], $error["file"], $error["line"]);
    }
}

set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutdownFunction");
set_exception_handler("EXC_HANDLER");
Komentar (0)

Kode ini di atas harus bekerja:

error_reporting(E_ALL);

Namun, cobalah untuk mengedit kode di telepon dalam file:

error_reporting =on
Komentar (0)

Terbaik/mudah/cepat solusi yang dapat anda gunakan jika itu's cepat debugging, adalah untuk mengelilingi kode anda dengan menangkap pengecualian. Yang's apa yang saya'm lakukan ketika saya ingin memeriksa sesuatu yang cepat dalam produksi.

try {
    // Page code
}
catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
Komentar (1)