Câu hỏi Làm cách nào để hiển thị lỗi PHP?


Tôi đã kiểm tra PHP ini lỗi tệp và hiển thị được đặt và cũng báo cáo lỗi là E_ALL. Tôi đã khởi động lại máy chủ web Apache của mình.

Tôi thậm chí còn đặt những dòng này ở đầu tập lệnh của mình và thậm chí không thu được lỗi phân tích cú pháp đơn giản. Ví dụ, tôi khai báo biến với một "$" và tôi không đóng báo cáo";". Nhưng tất cả các tập lệnh của tôi đều hiển thị một trang trống trên các lỗi này, nhưng tôi thực sự muốn thấy lỗi trong trình duyệt của tôi.

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

Những gì còn lại để làm gì?


1300
2018-06-27 19:09


gốc


Tôi chưa biết chính xác lý do tại sao điều này làm việc đôi khi và không phải những người khác, nhưng đối với bất cứ ai muốn nhanh chóng chuyển đổi lỗi trong một tập lệnh php (hoặc kích hoạt chúng thông qua một $_REQUESTtham số) hai dòng này sẽ hoạt động hầu hết thời gian. - brandonscript
bạn cũng có thể xem chi tiết lỗi bằng cách kích hoạt xdebug từ tệp php ini. - jewelhuq
Tìm tất cả các chi tiết tại đây php-show-all-errors.com - Abu Yousef


Các câu trả lời:


Điều này luôn làm việc cho tôi:

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

Tuy nhiên, điều này không làm cho PHP hiển thị lỗi phân tích cú pháp - cách duy nhất để hiển thị các lỗi đó là sửa đổi php.ini của bạn bằng dòng này:

display_errors = on

2530
2018-01-29 11:25



Cũng lưu ý rằng bạn có thể sử dụng 3 dòng này, và sau đó bao gồm ('fileImWorkingOn.php') ;. Sau đó, bạn có thể nắm bắt các lỗi cú pháp quá! - Snap
Điều này sẽ không hiển thị lỗi phân tích cú pháp - Bsienn
Trong khi tôi không có SysOps, tôi nghĩ rằng nhiều người có một tập tin .htaccess hơn php.ini, và cả hai sẽ đến trước khi phân tích cú pháp, phải không? php_flag display_errors 1 cho .htaccess - Ryan Taylor
Vì vậy, bây giờ mà các lỗi được đăng nhập, nơi nào họ đi? Tôi đã đi đến / var / log / apache2 và nó cho thấy tất cả các bản ghi, nhưng không có thông tin liên quan đến chương trình mà tôi đã chạy gần đây. Tôi chỉ nhận được thông tin về khởi động lại hệ thống mỗi sáng một lần. - Michael
@Michael Các lỗi đi ngay đến màn hình hoặc nơi đầu ra được chuyển hướng đến - Fancy John


Bạn không thể bắt lỗi phân tích cú pháp khi kích hoạt đầu ra lỗi khi chạy, vì nó phân tích cú pháp tệp trước khi thực thi bất kỳ thứ gì (và vì nó gặp lỗi trong quá trình này, nó sẽ không thực thi bất kỳ thứ gì). Bạn sẽ cần phải thay đổi cấu hình máy chủ thực tế để display_errors bật và mức error_reporting approriate được sử dụng. Nếu bạn không có quyền truy cập vào php.ini, bạn có thể sử dụng .htaccess hoặc tương tự, tùy thuộc vào máy chủ.

Câu hỏi này có thể cung cấp thêm thông tin.


133
2018-06-27 19:14



Không biết rằng. Tôi đã chỉnh sửa tệp php.ini theo cách thủ công và hiện đang hoạt động. Cảm ơn! - Abs


Bên trong của bạn php.ini:

display_errors = on

Sau đó khởi động lại máy chủ web của bạn.


120
2018-01-08 09:27



+1. Trên máy mac của tôi: /etc/php.ini - Shanimal
+ ①. Trên ubuntu /etc/php5/apache2/php.ini của tôi - m93a
cho khởi động lại (Debian, Ubuntu, v.v.) sudo service apache2 restart - Peter Krauss
Để khởi động lại trên OS X sudo apachectl -k restart. - Pea
thực tế thú vị: bạn có thể tìm tập tin php.ini của bạn được tải nếu bạn chỉ cần đặt vào phpinfo (); vào một tập tin php trống. đó là hàng thứ 7 xuống và được gọi là Loaded Configuration File - Frankenmint


Để hiển thị tất cả các lỗi bạn cần:

1. Có những dòng này trong kịch bản PHP bạn đang gọi từ trình duyệt (thường là index.php):

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

2. (a) Đảm bảo rằng tập lệnh này không có lỗi cú pháp

-hoặc là-

2. (b) Đặt display_errors = On trong của bạn php.ini

Nếu không, nó thậm chí không thể chạy 2 dòng đó!

Bạn có thể kiểm tra lỗi cú pháp trong kịch bản của mình bằng cách chạy (tại dòng lệnh):

php -l index.php

nếu bạn bao gồm kịch bản từ một kịch bản PHP khác sau đó nó sẽ hiển thị lỗi cú pháp trong bao gồm kịch bản. Ví dụ:

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

78
2018-01-29 09:52





Một số nhà cung cấp dịch vụ lưu trữ web cho phép bạn thay đổi thông số PHP trong .htaccess tập tin.

Bạn có thể thêm dòng sau:

php_value display_errors 1

Tôi đã có cùng một vấn đề như của bạn và giải pháp này đã sửa nó.


39
2018-05-18 15:01



không phải php_flag? I E.: php_flag display_errors on - PeterM
Tôi đã thử điều này và có 500 Lỗi Máy chủ Nội bộ. - posfan12


Bạn có thể thấy tất cả các cài đặt cho "báo cáo lỗi" hoặc "lỗi hiển thị" dường như không hoạt động trong PHP 7. Đó là do xử lý lỗi đã thay đổi. Hãy thử thay vào đó:

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'];
}

Hoặc, để bắt ngoại lệ và lỗi trong một lần (điều này không tương thích ngược với 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'];
}

29
2018-03-28 19:26



Nó sẽ là tốt đẹp để hiển thị các traceback cũng - Fancy John
Bạn có nghĩa là PHP7 hoặc PHP7.1? Tôi bối rối, tôi đã thử làm câu trả lời đã được xác nhận và nó hoạt động, tôi nghĩ bạn đang đề xuất một thứ IMHO khác, thực sự "không tương thích ngược" và nếu bạn phải sửa đổi mã PHP đầy đủ <7 và cần thêm try{} catch() {} mã ở khắp mọi nơi trong mã php đã được xác định của bạn, tôi thậm chí không muốn nghĩ rằng mớ hỗn độn đó sẽ là .. - vdegenne
@FancyJohn, điều này có thể giúp: $bt = debug_backtrace(); print_r($bt);. - Frank Forte
@ballangddang, tôi đã gặp phải vấn đề với PHP 7.0, cách duy nhất tôi có thể nhận được lỗi hiển thị là sử dụng các khối try / catch và đặc biệt bắt được Error. Nếu bạn viết lại tất cả các yêu cầu (ngoại trừ JavaScript, CSS, Hình ảnh, v.v.) vào tệp index.php, sau đó có khối try catch ở đó, nó làm cho nó dễ dàng hơn. Có, bất kỳ hệ thống nào không có một điểm vào sẽ là một nhức đầu lớn để cập nhật. - Frank Forte
Có phải PHP không hiển thị các ngoại lệ chưa được giải quyết không? Khá chắc chắn nó không? - Martin Tournoij


Điều này sẽ hoạt động:

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

26
2018-05-05 13:23





Sử dụng:

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

Đây là cách tốt nhất để viết nó, nhưng một lỗi cú pháp cho đầu ra trống, vì vậy hãy sử dụng bảng điều khiển để kiểm tra lỗi cú pháp. Cách tốt nhất để gỡ lỗi mã PHP là sử dụng bảng điều khiển; chạy như sau:

php -l phpfilename.php

25
2018-05-04 19:14





Tạo một tệp có tên php.ini trong thư mục chứa tệp PHP của bạn.

Bên trong php.ini thêm mã sau đây (Tôi đưa ra một lỗi đơn giản hiển thị mã):

display_errors = on

display_startup_errors = on

15
2018-03-31 18:38





Đặt điều này trong index.php

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

15
2017-09-26 12:32



Có, nó hoạt động tốt ... Cảm ơn @Sumit. - Vikas Dobariya


Đây là một kịch bản 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 */
?>

Để có giải thích chi tiết hơn về lỗi PHP, hãy truy cập Lỗi PHP - error_reporting ().


12
2018-01-11 12:37



Cái này khác gì với Fancy John's câu trả lời? - cpburnz