PHP에서 경고 메시지 제거


답변:


349

경고를 유발하는 모든 것을 수정해야하지만으로 오류의 가시성을 제어 할 수 있습니다 error_reporting(). 경고 메시지를 건너 뛰려면 다음과 같이 사용할 수 있습니다.

error_reporting(E_ERROR | E_PARSE);

53
E_ALL ^ E_WARNING경고 이외의 모든 오류보고를 활성화하면에 대한 더 나은 선택이 될 것 같습니다 error_reporting.
Mark Amery 19시 54 분

1
일반적으로 경고 메시지를 생성하는 것은 의도 한대로 작동하는 것입니다. 이것이 단위 테스트의 일부이기 때문입니다.
pgee70

120

모든 오류 메시지를 억제하기 위해 함수 호출 앞에 @ 를 넣을 수 있습니다 .

@yourFunctionHere();

4
이것은 단지 오류를 숨기고 여전히 발생합니다. 오류로 인해 PHP 속도가 느려지므로 가능한 경우 오류를 수정하는 것이 가장 좋습니다. @를 사용하면 오류가 없을 때 코드 속도가 느려집니다. vega.rd.no/articles/php-performance-error-suppression
2

46
때때로 (불행히도) 당신은 정말로 선택의 여지가 없습니다. 예를 들어, PHP 함수 parse_url ()은 "심하게 잘못된"URL에 대한 경고를 생성합니다.이 경우 함수가 false를 반환하므로 버그 일 수 있습니다. 따라서 프로그램 출력에서 ​​이러한 PHP 경고를 허용하거나 (파서 / 검증기 응용 프로그램에서는 허용되지 않을 수 있음) 어쨌든 경고를 억제하거나 URL에 대한 자체 파서 / 검증기를 작성하여 손상된 PHP 동작을 해결해야합니다. 이 경우 @를 선택합니다.
피터

1
중요 : iff (1) 경고를 생성하는 문제를 해결할 수 없으며 (2) php error_reporting을 통해 최종 사용자로부터 경고를 숨길 수 없습니다 ... 개발자의 경고를 숨기는 것은 해결책이 아닙니다.
Joshua Kissoon

3
이것이 왜 중요한지 설명하겠습니다. 일부 기능 dns_get_record은 경고를 발생시킵니다. 코드가 경고를 보상 할 수 있지만 여전히 경고를 던집니다. 오류보고를 끄면 프로덕션 서버에서는 작동하지만 개발 서버에서는 작동하지 않습니다. XML 컨텐츠를 생성하는 경우, 경고로 인해 서버가 잘못된 XML을 전송하므로 경고로 인해 브라우저가 렌더링되지 않습니다. 때로는 당신이 그것을 원하지만 이미 보상 한 일시적인 DNS 조회 실패로 인한 것이 아닙니다.
Alice Wonder

2
모든 경고 메시지 대신 경고로 오류를 처리하고 사용자 고유의 오류 메시지를 생성하려는 경우 이것이 유용한 이유를 설명하겠습니다.
Daniel N.

43

다른 모든 오류보고를 활성화 한 상태에서 경고를 표시하지 않으려면 :

error_reporting(E_ALL ^ E_WARNING); 


18

다른 모든 오류를 표시하는 동안 경고 및 일부 다른 오류 유형 (예 : 알림)을 표시하지 않으려면 다음을 수행하십시오.

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);

15

Core Php에서 일반 포함 파일 또는 개별 파일의 맨 위에 경고 메시지 세트 error_reporting (0)을 숨기려면.

Wordpress에서 경고 및 알림 숨기기 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);

Wordpress에서 로그를 숨길 때 가장 좋은 솔루션입니다. 감사합니다!!
Neo Morina

10

질문에 정확하게 대답하지는 않지만 일부 상황에서는 이것이 더 나은 타협이라고 생각합니다.

타사 라이브러리의 printf () 문으로 인해 경고 메시지가 나타납니다. 제 3자가 코드를 수정하는 동안 일시적인 해결 방법 인 원인이 무엇인지 정확히 알고있었습니다. 경고가 표시되지 않아야한다는 데 동의하지만 경고 메시지가 화면에 표시되어 클라이언트에게 작업을 보여줄 수 없습니다. 내 해결책 :

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

경고는 여전히 페이지 소스에 있었지만 클라이언트에게는 보이지 않습니다.


5
개인적으로 대신 사용 ob_start()하고 싶습니다 ob_end_clean(). 이렇게하면 물건이 브라우저로 전송되지 않습니다 (여기에서).
h2ooooooo

6
그렇기 때문에 "일부 상황", "경고를 억제해서는 안됩니다"및 "나에게 알림"을 ​​포함 시켰습니다.
DaveWalley

1
더 많은 투표를하기 전에 답장을 읽으십시오. "타사", "타협"및 위의 주석을 참고하십시오. 다른 사람이 내가 있었던 것과 같은 상황에 처한 경우이 답변을 추가했으며 특정 상황에서 다른 모든 답변이 좋지 않았을 때 저를 구했습니다. 다음에 나는 도움이되는 것에 대해 두 번 생각할 것입니다.
DaveWalley

이 훌륭한 아이디어를 제거하지 않아서 감사합니다. 내 시스템에서 모든 오류와 경고를 저장하고 클라이언트에서 다시 보내며 관리자가 로그인하면 유지 관리 담당자에게 조언 할 수 있도록 해당 활동에 즉시 경고합니다. 이 사이트는 교육용 게임이므로 한 시간 정도 문제가 발생해도 문제가되지 않습니다.
1

8

php.ini 에서 다음과 같이합니다 .

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

치명적인 오류 만 기록하고 경고는 기록하지 않습니다.


7

더 나은 솔루션은 .htaccess의 구성이라고 생각합니다. 그러면 응용 프로그램 코드를 변경할 필요가 없습니다. 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

7

error_reporting을 사용하여 경고를 표시하지 않을 수 있지만 가장 좋은 방법은 스크립트를 처음에 수정하는 것입니다.

방법을 모르는 경우 질문을 편집하여 문제의 줄과 경고를 표시하십시오.


7
Safaali, 당신은 문제를 해결해야합니다. 그런 다음 무시하지 마십시오.
Sampson

2
Safaali는 PHP에 관심이 있으시면 자신에게 유리한 태도를 취하고 해당 스크립트를 수정하는 것을 고려하십시오.
Pekka

0

Error Control Operator에 대한 답변이 이미 있지만 설명이 부족합니다. @모든 표현식에 연산자를 사용할 수 있으며 오류를 숨 깁니다 (치명적 오류 제외).

@$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()

디버깅을 위해서는 빠르고 완벽한 방법입니다. 그러나 프로덕션 환경에서 사용하거나 로컬 버전에 영구적으로 포함해서는 안됩니다. 불필요한 자극을 많이 줄 것입니다.

대신 다음을 고려해야합니다.

1. 허용 된 답변에 언급 된 오류보고 설정.

error_reporting(E_ERROR | E_PARSE);

또는 PHP INI 설정에서

ini_set('display_errors','Off');

2. 예외 잡기

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

0

모든 경고를 무시하려면 코드 상단에 다음 샘플을 사용하십시오.

error_reporting(0);

그리고 대답과 대답이 어떻게 다릅니 까?
endo64
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.