247

Tôi có một số mã PHP. Khi tôi chạy nó, một thông báo cảnh báo sẽ xuất hiện.

Làm cách nào để xóa / chặn / bỏ qua các thông báo cảnh báo này?

|
378

Bạn thực sự nên khắc phục bất cứ điều gì gây ra cảnh báo, nhưng bạn có thể kiểm soát khả năng hiển thị của các lỗi với error_reporting(). Để bỏ qua các thông báo cảnh báo, bạn có thể sử dụng một cái gì đó như:

error_reporting(E_ERROR | E_PARSE);
|
  • 1
    E_ALL ^ E_WARNING, cho phép tất cả báo cáo lỗi bên cạnh cảnh báo, có vẻ như là một lựa chọn đối số tốt hơn error_reporting. –  19:54:54 25/08/2014
  • 1
    Nói chung, tôi đồng ý, trong trường hợp của tôi, việc tạo ra thông báo cảnh báo là hành vi có chủ đích vì nó là một phần của các bài kiểm tra đơn vị của tôi. –  10:15:37 03/10/2017
  • 1
    Toán tử "^" làm gì? –  20:23:23 20/01/2021
123

Bạn có thể đặt @ trước lệnh gọi hàm của mình để loại bỏ tất cả các thông báo lỗi.

@yourFunctionHere();
|
  • 1
    Điều này chỉ ẩn lỗi, nó vẫn đang xảy ra. Các lỗi làm cho PHP chạy chậm lại vì vậy tốt nhất là bạn nên sửa lỗi nếu có thể. Sử dụng @ thậm chí làm chậm mã khi không có lỗi. vega.rd.no/articles/php-performance-error-suppression –  02:31:10 01/01/2010
  • 1
    Đôi khi (không may) bạn thực sự không có sự lựa chọn. Ví dụ: hàm parse_url () PHP tạo Cảnh báo cho các URL "không đúng định dạng nghiêm trọng" - được cho là một lỗi vì hàm trả về false trong trường hợp này. Vì vậy, bạn phải chịu đựng những cảnh báo PHP này trong đầu ra chương trình của mình (có thể không được chấp nhận đối với các ứng dụng phân tích cú pháp / trình xác thực), loại bỏ Cảnh báo bằng cách nào đó hoặc khắc phục hành vi PHP bị hỏng bằng cách viết trình phân tích / xác thực của riêng bạn cho URL. Trong trường hợp này, tôi chọn @. –  20:14:51 11/12/2012
  • 1
    QUAN TRỌNG: Sử dụng phương pháp này iff (1) bạn không thể khắc phục sự cố tạo ra cảnh báo cũng như (2) ẩn cảnh báo của bạn với người dùng cuối thông qua php error_reporting ... Ẩn cảnh báo từ nhà phát triển của bạn KHÔNG phải là một giải pháp. –  11:42:21 26/06/2014
  • 1
    Hãy để tôi giải thích tại sao điều này là quan trọng. Một số chức năng như dns_get_recordsẽ ném cảnh báo. Mã của bạn có thể bù cho cảnh báo nhưng nó vẫn ném chúng. Tắt báo cáo lỗi hoạt động trên máy chủ sản xuất, nhưng không hoạt động trên máy chủ devel. Nếu bạn đang tạo nội dung XML, cảnh báo sẽ khiến trình duyệt không hiển thị vì máy chủ đang gửi XML không đúng định dạng do cảnh báo gây ra. Đôi khi bạn muốn điều đó trên devel, nhưng không phải vì điều gì đó gây ra bởi lỗi tra cứu DNS tạm thời mà bạn đã bù đắp. –  21:39:16 19/02/2015
  • 1
    Hãy để tôi giải thích tại sao điều này là hữu ích, khi thay vì tất cả các thông điệp cảnh báo, nó là bạn của những người muốn xử lý các cảnh báo như một lỗi và tạo ra thông báo lỗi của riêng bạn –  02:39:20 07/06/2015
47

Để loại bỏ cảnh báo trong khi vẫn bật tất cả các báo cáo lỗi khác:

error_reporting(E_ALL ^ E_WARNING); 
|
28

Nếu bạn không muốn hiển thị cảnh báo cũng như lỗi sử dụng

// Turn off all error reporting
error_reporting(0);

Báo cáo lỗi - Hướng dẫn sử dụng PHP

|
24

Nếu bạn muốn loại bỏ các cảnh báo và một số loại lỗi khác (ví dụ: thông báo) trong khi hiển thị tất cả các lỗi khác, bạn có thể thực hiện:

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
|
17

trong Core Php để ẩn thông báo cảnh báo đặt error_reporting (0) ở đầu bao gồm tệp chung hoặc tệp riêng lẻ.

Trong Wordpress ẩn Cảnh báo và Thông báo, thêm mã sau vào tệp wp-config.php

ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
|
  • 1
    Đây là giải pháp tốt nhất khi nói đến ẩn nhật ký trong Wordpress. Cảm ơn bạn!! –  07:49:35 20/05/2020
11

Không trả lời chính xác câu hỏi, nhưng tôi nghĩ rằng đây là một thỏa hiệp tốt hơn trong một số tình huống:

Tôi đã có một thông báo cảnh báo do câu lệnh printf () trong thư viện của bên thứ ba. Tôi biết chính xác nguyên nhân là gì - một sự cố tạm thời trong khi bên thứ ba sửa mã của họ. Tôi đồng ý rằng không nên loại bỏ các cảnh báo, nhưng tôi không thể chứng minh công việc của mình cho khách hàng với thông báo cảnh báo xuất hiện trên màn hình. Giải pháp của tôi:

printf('<div style="display:none">');
    ...Third-party stuff here...
printf('</div>');

Cảnh báo vẫn còn trong nguồn trang như một lời nhắc nhở đối với tôi, nhưng vô hình đối với khách hàng.

|
  • 1
    Cá nhân, tôi muốn sử dụng ob_start()ob_end_clean()thay thế. Bằng cách này, nội dung thậm chí không được gửi đến trình duyệt (mà nó thực hiện ở đây). –  20:07:18 30/12/2012
  • 1
    Đó là lý do tại sao tôi đưa vào "một số tình huống", "cảnh báo không nên bị dập tắt" và "nhắc nhở cho tôi". –  20:10:28 30/12/2012
  • 1
    Trước khi bỏ phiếu cho tôi nhiều hơn, vui lòng đọc câu trả lời của tôi. Lưu ý "bên thứ ba", "thỏa hiệp" và nhận xét ở trên. Tôi đã thêm câu trả lời này trong trường hợp ai đó khác ở trong tình huống giống tôi và trong tình huống cụ thể đó, điều này đã cứu tôi trong khi tất cả các câu trả lời khác sẽ không tốt như vậy. Lần tới tôi sẽ suy nghĩ kỹ về việc có ích. –  14:49:27 17/09/2014
  • 1
    Cảm ơn bạn đã không loại bỏ ý tưởng tuyệt vời này. Trên hệ thống của mình, tôi lưu tất cả các lỗi và cảnh báo, được gửi lại từ khách hàng và khi quản trị viên đăng nhập, họ sẽ được cảnh báo ngay lập tức về bất kỳ hoạt động nào như vậy để họ có thể thông báo cho nhóm bảo trì. Trang web dành cho các trò chơi giáo dục nên sẽ không có vấn đề gì nếu có bất kỳ sự cố nào xảy ra trong một giờ hoặc lâu hơn. –  01:44:47 05/11/2017
9

Tôi làm điều đó như sau trong php.ini của tôi :

error_reporting = E_ALL & ~E_WARNING  & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

Bản ghi này chỉ ghi lại các lỗi nghiêm trọng và không có cảnh báo.

|
7

Tôi nghĩ rằng giải pháp tốt hơn là cấu hình .htaccess Theo cách đó, bạn không phải thay đổi mã của ứng dụng. Đây là chỉ thị cho Apache2

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
|
5

Bạn có thể loại bỏ cảnh báo bằng error_reporting nhưng cách tốt hơn nhiều là sửa tập lệnh của bạn ngay từ đầu.

Nếu bạn không biết cách thực hiện, hãy chỉnh sửa câu hỏi của bạn và hiển thị cho chúng tôi dòng được đề cập và cảnh báo được hiển thị.

|
  • 1
    Safaali, bạn phải sửa chữa các vấn đề, không được bỏ qua sau đó. –  00:45:13 01/01/2010
  • 1
    Safaali, nhận thấy rằng bạn có một mối quan tâm nhất định đến PHP, hãy tự giúp mình và tìm cách sửa tập lệnh đó. –  01:19:27 01/01/2010
2

Để bỏ qua tất cả các cảnh báo, hãy sử dụng mẫu này, trên đầu mã của bạn:

error_reporting(0);
|
  • 1
    Và sự khác biệt của câu trả lời của bạn với câu trả lời được chấp nhận là gì? –  20:16:26 24/05/2020
0

Đã có câu trả lời với Toán tử Kiểm soát Lỗi nhưng nó thiếu giải thích. Bạn có thể sử dụng @toán tử với mọi biểu thức và nó ẩn các lỗi (ngoại trừ Lỗi nghiêm trọng).

@$test['test']; //PHP Notice:  Undefined variable: test

@(14/0); // PHP Warning:  Division by zero

//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error:  Uncaught Error: Call to undefined function customFuntion()

Để gỡ lỗi, đó là phương pháp nhanh chóng và hoàn hảo. Nhưng bạn không bao giờ nên sử dụng nó trên sản xuất cũng như vĩnh viễn đưa vào phiên bản cục bộ của bạn. Nó sẽ mang đến cho bạn nhiều sự kích thích không đáng có.

Thay vào đó, bạn nên xem xét:

1. Lỗi cài đặt báo cáo như đã đề cập trong câu trả lời được chấp nhận.

error_reporting(E_ERROR | E_PARSE);

hoặc từ cài đặt PHP INI

ini_set('display_errors','Off');

2. Nắm bắt các trường hợp ngoại lệ

try {
    $var->method();
} catch (Error $e) {
    // Handle error
    echo $e->getMessage();
}
|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.