PHP 오류를 어떻게 방지합니까?


32

Drupal에서 모든 PHP 오류, 경고 및 알림을 끄는 방법이 있습니까? 이들은 개발 된 사이트에서 유용하지만 보안 상 위험이 크며 사이트를 실제로보기에 좋지 않게 만듭니다.

Drupal 6의 admin / settings / error-reporting 페이지에서 Drupal이 화면에 오류를 기록하는 것을 막을 수 있지만 Drupal 7에서 어디서 찾을 수 있습니까? 누락 된 것 같습니다.


3
그러나 오류는 매우 중요한 역할을합니다. 오류는 무언가 잘못되었음을 나타냅니다. 그것을 억압하면 근본적인 문제는 해결되지 않습니다. 이것을 "러시아 방법"이라고도합니다. 원자력 발전소의 경보등이 깜박이기 시작하면 전구를 제거하십시오. 알람 표시등이 더 이상 깜박이지 않습니다. 아무 문제 없습니다.
berkes

웃긴 :). 그러나 프로덕션 사이트에서는 오류 만 억제합니다.
drupal_stuff_alter

Drupal에는 표시 할 오류를 결정하는 옵션이 있습니다. 표시되지 않음 오류는 여전히 데이터베이스에 기록되며 admin / reports / dblog에 표시됩니다.
kiamlaluno

@kiamlaluno, 생산은 다소 괜찮습니다 (결제에 실패했다는 오류가 항상 더 나은 경우 클라이언트가 불확실한 상태로 남습니다). 그러나 개발 및 테스트에서 내 경험은 dblog에 푸시 된 오류는 무시된다는 것입니다. 시간당 수백 개의 알림과 경고가 기록 된 Drupalsite는 예외가 아닙니다. 그리고 소음에서 실제 예외 및 오류가 손실됩니다. 가장 좋은 점은 개발자의 얼굴에 각각의 모든 통지를 강요하는 것입니다.
berkes

그러나 OP는 프로덕션 사이트에서 이러한 오류를 숨기는 데 관심이있는 것 같습니다. ( "
개발자

답변:


29

Drupal 7 에서처럼 admin / settings / error-reporting에서 볼 수있는 것과 동일한 페이지가 이제 admin / config / development / logging에 있습니다.

스크린 샷


1
어떤 이유로, 나는 이것을 할 수 없습니다. 저장을 클릭하면 선택 내용이 재설정됩니다. 데이터베이스에서 수동으로 이것을 변경할 수있는 방법이 있습니까?
Niranjan N Raju

17

제안 된 것처럼 Administration » Configuration » Development(에서 /admin/config/development/logging) 에서 오류 메시지 표시 를 비활성화 하는 설정을 찾을 수 있지만 오류 / 공지가 완전히 비활성화되지는 않습니다.

Drupal 7은 E_ALL을 시행하기 때문에 여전히 syslog에 기록되며 웹 사이트 성능에 영향을 미치는 최근 로그 에서 볼 수 있습니다 .

통지를 완전히 비활성화하려면 settings.php또는 php.ini파일에 다음 줄을 추가해야 합니다.

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

통지 및 코딩 표준 경고를 제외한 모든 오류를 표시하십시오.

권장하지 않는 모든 PHP 오류를 침묵 시키려면 설정 파일을 추가 할 수 있습니다.

error_reporting(0); // Disable all errors.

만나다: error_reporting()


E_ALL로깅을 위한 책임있는 Drupal 7 핵심 코드 (파일 :) includes/bootstrap.inc:

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

참조 :


4

사람들이 아는 데 도움이 될 수있는 언급이없는 한 가지는 Drupal 7이 모든 로컬 시스템 오류보고 수준을 무시한다는 것입니다. 따라서 Drupal에서 .htaccess 또는 php.ini를 사용하여 PHP 오류보고 수준을 설정할 수 없습니다.

D8에는이를 위해 제안 된 패치가 있지만 현재 D7에서는 관리자 페이지 kiamlaluno에 설정된 3 개의 오류 마스크 (모두, 없음 또는 오류 및 경고)로 제한되어 있습니다.


3

설정은 항상 admin / config / development / logging에 있습니다. :)


고마워요! 여전히 녹색 알림을 유지하고 싶습니다. 그들이 사라지지 않기를 바랍니다.
drupal_stuff_alter

2

왜 Drush 메소드가 문서화되지 않았는지 모르겠지만 빌드 스크립트에 있습니다.

drush vset error_level 0

... 오류 메시지를 로그에 저장하지만 화면에는 표시하지 않습니다.


1

위에 게시 된 솔루션 kenorb에 따옴표를 추가해야 할 수도 있습니다.

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

이것은 잘못되었습니다-상수이므로 인용해서는 안됩니다. error_reporting은 정수 상수 OR로 구성된 정수 값입니다. 여기에있는 것처럼 상수 이름으로 구성된 문자열 설정이 아닙니다.
datashaman

0

이를위한 모듈이 있습니다 :

https://www.drupal.org/project/errorlevelpermission

프로젝트 페이지에서 :

그래서 당신은 할 수 있습니다

  • 사이트 빌더 역할 (또는 특수 디버거 역할)이 오류 및 알림을 볼 수 있습니다
  • 다른 사람들이 오류와 통지를 보지 못하게하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.