Làm cách nào để tắt tiếng PHP?


32

Có cách nào để tắt tất cả các lỗi, cảnh báo và thông báo về PHP trong Drupal không? Chúng rất hữu ích trên trang web phát triển nhưng chúng là một rủi ro bảo mật lớn và làm cho trang web trông tệ khi trực tiếp.

Tôi biết trên Drupal 6 trang tại admin / settings / báo cáo lỗi có thể ngăn Drupal viết lỗi lên màn hình, nhưng tôi có thể tìm thấy điều này ở đâu trong Drupal 7? Có vẻ như nó bị mất tích.


3
Tuy nhiên, xin lưu ý rằng các lỗi đó có vai trò rất quan trọng: chúng chỉ ra rằng có điều gì đó không ổn. Thay vào đó, không giải quyết được vấn đề tiềm ẩn. Đây còn được gọi là "Phương pháp Nga": Khi đèn báo động trong nhà máy hạt nhân bắt đầu nhấp nháy, chỉ cần tháo bóng đèn. Đèn báo thức không còn nhấp nháy; không vấn đề gì.
cập bến

Buồn cười :). Nhưng tôi chỉ khắc phục lỗi trên trang web sản xuất.
drupal_ ware_alter

Drupal có tùy chọn để quyết định những lỗi nào sẽ được hiển thị; lỗi không hiển thị vẫn được ghi lại trong cơ sở dữ liệu và được hiển thị trong admin / báo cáo / dblog.
kiamlaluno

@kiamlaluno, trong sản xuất có phần ổn (nhưng vẫn có lỗi là thanh toán thất bại luôn tốt hơn sau đó khiến khách hàng của bạn không chắc chắn). Nhưng trong quá trình phát triển và thử nghiệm, kinh nghiệm của tôi là các lỗi được đưa vào dblog bị loại bỏ. Drupalsites với hàng trăm thông báo và cảnh báo mỗi giờ đăng nhập ở đó, cũng không ngoại lệ. Và các trường hợp ngoại lệ và lỗi thực sự bị mất trong tiếng ồn. Tốt nhất là đẩy mạnh từng thông báo vào khuôn mặt của nhà phát triển.
berkes

Đúng, nhưng OP dường như quan tâm để che giấu những lỗi đó trong một trang web sản xuất. (Xem, "Chúng rất hữu ích trên trang web phát triển nhưng chúng là một rủi ro bảo mật lớn và khiến trang web trông tệ khi trực tiếp.")
kiamlaluno

Câu trả lời:


29

Đường dẫn thay đổi, như trong Drupal 7, cùng một trang mà bạn sẽ thấy trước đây tại admin / settings / báo cáo lỗi hiện đang ở admin / config / Development / log.

ảnh chụp màn hình


1
Vì một số lý do, tôi không thể làm điều này. Khi nhấp vào lưu, lựa chọn của tôi đang được thiết lập lại. Có cách nào tôi có thể thay đổi điều này bằng tay trong cơ sở dữ liệu hoặc một cái gì đó như thế này không ??
Niranjan N Raju

17

Như đã đề xuất, trong Administration » Configuration » Development(at /admin/config/development/logging) bạn có thể tìm thấy cài đặt để tắt hiển thị thông báo lỗi, nhưng nó sẽ không hoàn toàn vô hiệu hóa lỗi / thông báo.

Đó là vì Drupal 7 thi hành E_ALL, vì vậy chúng vẫn được ghi vào syslog và bạn có thể thấy chúng trong các nhật ký gần đây ảnh hưởng đến hiệu suất trang web của bạn.

Để tắt hoàn toàn các thông báo, bạn sẽ phải thêm dòng sau vào tệp settings.phphoặc php.initệp của mình:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

Hiển thị tất cả các lỗi, ngoại trừ các thông báo và cảnh báo tiêu chuẩn mã hóa.

Để tắt tất cả các lỗi PHP không được khuyến nghị, bạn có thể thử thêm tệp cài đặt của mình:

error_reporting(0); // Disable all errors.

Xem: error_reporting()


Mã 7 lõi ​​có trách nhiệm Drupal để E_ALLghi nhật ký (tệp includes/bootstrap.inc:):

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

Xem thêm:


4

Một điều không ai đã đề cập có thể hữu ích cho mọi người biết là Drupal 7 bỏ qua tất cả các cấp báo cáo lỗi hệ thống cục bộ. Vì vậy, bạn không thể sử dụng .htaccess hoặc thậm chí php.ini để đặt mức báo cáo lỗi php trong Drupal.

Có một bản vá được đề xuất cho điều này trong D8, nhưng hiện tại trong D7, bạn bị giới hạn ở 3 mặt nạ lỗi HPallall, không có lỗi hoặc cảnh báo nào được đặt trên trang quản trị mà kiamlaluno đã chỉ ra.


3

Cài đặt luôn trong admin / config / Development / log :)


Cảm ơn rất nhiều! Tôi vẫn muốn có các thông báo màu xanh lá cây còn sống. Hy vọng họ sẽ không biến mất.
drupal_ ware_alter

2

Không chắc tại sao phương thức Drush không có giấy tờ, nhưng tôi có trong tập lệnh xây dựng của mình:

drush vset error_level 0

... lưu các thông báo lỗi vào nhật ký nhưng không hiển thị chúng trên màn hình.


1

Bạn có thể cần thêm dấu ngoặc kép vào giải pháp kenorb đã đăng ở trên:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');

Điều này là sai - đó là hằng số, chúng không nên được trích dẫn. error_Vporting là một giá trị số nguyên được tạo thành từ các hằng số nguyên ORed với nhau. Nó không phải là một thiết lập chuỗi được tạo thành từ các tên không đổi như bạn đã có ở đây.
datashaman 15/03/2016

0

Có một mô-đun cho rằng:

https://www.drupal.org/project/errorlevel allow

Từ trang dự án:

Vì vậy bạn có thể

  • có vai trò trình điều khiển (hoặc thậm chí là vai trò gỡ lỗi đặc biệt) thấy lỗi và thông báo
  • có người khác không thấy lỗi và thông báo.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.