PHP 통지를 끄려면 어떻게합니까?


126
Notice: Constant DIR_FS_CATALOG already defined

display_errors에서 이미 주석 처리 php.ini했지만 작동하지 않습니다.

그런 것들을 브라우저에 출력하지 않도록 PHP를 어떻게 만듭니 까?

최신 정보

나는 display_errors = Off거기에 넣었 지만 여전히 그러한 통지를보고하고 있습니다.

이것은 PHP 5.3의 문제입니까?

수많은 콜 스택 보고 도 ..


3
Apache를 사용하는 경우 서버를 다시 시작해야 할 수 있습니다! XAMPP를 사용하는 경우 관리자 앱에서 "다시 시작"을 선택하십시오.
st4wik 2015

2
grep display_errors /path/to/php.ini라인이 파일 아래 어딘가에 재정의되는지 확인하기 위해 실행 하는 것이 좋습니다 . 이것이 나에게 일어난 일입니다.
usandfriends

error_reporting은이 솔루션
데이비드 Stienen

ini_set('display_errors',0)PHP 파일에서 시도 하십시오. 초기화 설정이 작동하지 않는 경우 phpinfo()원하는 값이 표시 되는지 확인해야 합니다. 그렇지 않은 경우 잘못된 ini 파일을 변경했거나 무언가가 php.ini의 값을 덮어 씁니다
Radon8472

PHP 5.3 버그가 아닙니다. display_errors는 php 4.0.3에서 최신 버전까지 @see 3v4l.org/87gIl
Radon8472

답변:


78

당신은 설정할 수 display_errors0또는 사용 error_reporting()기능.

그러나 통지는 성가 시지만 ( 부분적으로 공감할 수 있음 ) 목적을 제공합니다. 상수를 두 번 정의하면 안됩니다. 두 번째는 작동하지 않으며 상수는 변경되지 않습니다!


4
+1 :보고 기능을 끄지 말고 오류를 수정해야한다고 언급하는 것을 승인합니다. 그리고 당신은 @Jonathan Kuhn보다 더 부드러운 방식으로 그것을했습니다 :-)
Josh

1
아니요, 이것은 php5.3의 버그 인 것 같습니다 display_errors. 예상대로 작동하지 않습니다.
user198729

@user phpinfo()는 설정이 실제로 적용되는지 확인합니다. 저를 용서하십시오, 그러나 당신이 PHP 5.3에서 버그를 발견했다고 강력히 의심합니다 – 나는 그것을 볼 때만 그것을 믿을 것입니다 :)
Pekka

이상합니다. local value켜져 있지만 master value꺼져 있습니다. 정확히 무슨 뜻인지
모르겠습니다

1
@user 로컬 값은 파일의 ini_set지시문이나 php_ini_flag설정에서 올 수 있다고 생각 .htaccess합니다.
Pekka

242

PHP 문서 ( error_reporting )에서 :

<?php
// Turn off all error reporting
error_reporting(0);
?>

해당 기능에 대한 다른 흥미로운 옵션 :

<?php

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL & ~E_NOTICE);
// For PHP < 5.3 use: E_ALL ^ E_NOTICE

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

매우 도움이되며 질문에 대한 답변을 제공합니다. 모든 통지를 수정하는 것이 더 낫다는 것을 알고 있지만. 때로는 알림을 제외한 모든 것을 표시하는 것이 편리 할 수 ​​있습니다.
Timo002

3
위 게시물에 명시된 ^ NOTICE를 사용하여 알림 만 끄는 것이 작동하지 않았습니다. PHP v5.3 사용 : E_ALL & ~ E_NOTICE
Chizzle 2014 년

JSON 또는 XML 등을 반환하는 REST API가있는 경우 이러한 기능을 해제 할 수 있습니다. 또는 최소한 예외로 변환하고 그에 따라 처리하십시오.
TheRealChx101

안녕하세요. 나를 위해 일했습니다. 대단히 감사합니다.
H. Farid

Display_errors는 오류가 stdoutput으로 전송되는 경우 제어합니다. 그러나 error_reporting을 0으로 변경하면 모든 오류 처리 및 오류 기록 작업을 완전히 비활성화하게됩니다.
Radon8472

30

명령 줄 php의 경우

error_reporting = E_ALL & ~E_NOTICE

/etc/php5/cli/php.ini

명령 php실행은 알림을 생략합니다.


이렇게하면 php.ini에서 error_reporting = E_ALL & ~ E_NOTICE & ~ E_WARNING이됩니다. PHP 알림 및 PHP 경고를 비활성화합니다. 더 PHP는 통지와 PHP 경고는 브라우저에서 볼 수없는 그래서
디팍 Lamichhane에게

이것은 콘솔 PHP 설정에 적용됩니다. apache2를 통해 웹 페이지를 생성하기 위해 php를 사용하는 경우 webserver 구성 파일은 /etc/php5/apache2/php.ini입니다. 실제로 사용되는 구성 파일을 확인하려면 phpinfo ()를 사용하는 것이 가장 좋습니다.
MilanG

23
<?php

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

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

출처 http://php.net/manual/en/function.error-reporting.php


2
이것은 몇 년 전에 게시 된 기존 답변 의 중복 아닙니까?
Pang

우리는 둘 다 PHP 문서에서 붙여 넣은 사본을 가지고 있으며 두 답변 모두 리소스를 언급했습니다.
Abhishek Goel 2015 년

@AbhishekGoel Unicorns는 변장 한 조랑말입니다. 그 진술은 무관합니다 . 4 년이 지난 지금도 이미 존재하는 대답을 복제했습니다 .
Ricky Boyce

@RickyB 기존 답변을 확인하지 않았고 복사하지도 않았습니다.
Abhishek Goel

12

코드에서이 줄을 사용했습니다.

error_reporting(E_ALL ^ E_NOTICE);  

나는 그 선반이 당신에게 가득하다고 생각합니다.


6

당신이 찾고있는:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"

2
@Christian 안녕하세요, StackOverflow에 오신 것을 환영합니다! 미래에는 해결책이 왜 / 어떻게 작동하고 / 문제를 해결하는지에 대해 그것을 보는 사람들을 계몽하기 위해 대답에 약간의 추가 설명 / 세부 사항을 추가 할 수 있다면 좋을 것입니다. 덕분에 너무 많은, 행복 : 코딩
재커리 Kniebel

1
바로 그거죠! 나는 /usr/bin/php -d error_reporting="E_ERROR | E_WARNING | E_PARSE" -f /path/to/file.php내 crontab에 사용
vladkras

4

error_reporting내 코드 내부를 설정하지 않는 것이 좋습니다. 그러나 한 경우, 레거시 제품에는 너무 많은 알림이있어서 숨겨야합니다.

그래서 다음 스 니펫을 사용하여 서버 측 구성 값을 설정 error_reporting했지만 E_NOTICEs를 뺍니다 .

error_reporting(error_reporting() & ~E_NOTICE);

이제 오류보고 설정을 php.ini또는 에서 추가로 구성 할 수 있습니다 .htaccess. 알림 만 항상 비활성화됩니다.


3

ini_set('display_errors',0);스크립트에서 설정 하거나으로 표시 할 오류를 정의 할 수 있습니다 error_reporting().


ini_set여기에 언급 된 방법 을 사용해야하는데 error_reporting(0)다른 곳에 언급 된 방법은 효과가 없었습니다.
pix

2

오류를 일으키지 않음으로써 :

defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');

꼭 필요한 경우 error_reporting ()을 사용하여 오류보고를 E_ALL ^ ​​E_NOTICE로 변경하십시오.


1
프로덕션 사이트 인 경우 오류가 없다고 생각하든 그렇지 않든 오류가 발생하더라도 표시하지 않아야합니다. 따라서 '오류를 일으키지 않음'은 유효한 질문에 대한 약간 건방진 응답처럼 보입니다.
Cam

5
프로덕션 사이트에서 오류를 허용하는 것은 언제부터 가능합니까? 나는 프로덕션 사이트에서 오류를 표시해서는 안된다는 데 동의합니다. 상수가 정의되어 있는지 확인하고 그렇지 않은 경우 설정해야한다고 말하고있었습니다 (이것이 코드 샘플을 제공 한 이유입니다).
Jonathan Kuhn

귀하의 답변이 "가장 좋은"것은 아니지만 OP의 질문에 최대한 대답하는 것 같습니다. 귀하의 답변에 +1하고 정답이기 때문에 답변으로 표시되기를 바랍니다.
Nazca 2014

@Nazca 예, 나는 그 이후로 내 태도를 바꾸고 훨씬 더 친근하게 노력했습니다. :)
Jonathan Kuhn 2014

2

PHP 코드의 경우 :

<?php
error_reporting(E_ALL & ~E_NOTICE);

대한 php.ini설정 :

error_reporting = E_ALL & ~E_NOTICE

1

최근에이 트릭을 발견했습니다. 경고 / 오류를 생성 할 수있는 줄의 시작 부분에 @를 두드립니다.

마치 마술처럼 사라집니다.


21
그것은 일반적으로 좋지 않은 생각입니다. 차가 끔찍한 갈리는 소음을 내기 때문에 귀마개를 끼는 것과 같습니다.
David Morrow

10
예를 들어 변수가 설정되어 있거나 비어 있는지 여부에 관계없이 변수를 렌더링 할 때와 같이 일부 인스턴스에는 실제로 완벽합니다.
Frans 2013 년

1
이것은 작성자가 아직 업데이트하지 않은 WordPress 플러그인과 같은 것이 있고 문제의 원인을 정확히 알고있는 경우에만 의미가 있습니다. 그래도 반창고는 아니지만 수정이 아닙니다.
의무적

나는 error_reporting ()과 '@'을 모두 좋아합니다. 나는 이것들 중 어느 것도 알지 못했습니다. 감사합니다. '@'는 error_reporting (0)과 동일한 기능을 제공하고 입력하기가 더 쉽기 때문에 좋아합니다. 문제가 "끔찍한 갈기 소음"보다 "배기 장치를 고정하는 옷걸이"에 더 가깝다면 프로젝트를 진행할 수 있습니다. 시간이 있으면 쉽게 찾아서 고칠 수 있습니다. 이는 파일에서 읽은 데이터로 인해 오류가 발생하여 오타 나 라이브러리 문제가없는 문제를 해결하는 데 도움이되었습니다.
Mark Longmire 2013-10-29

1
당신이하고있는 일을 100 % 확신 할 수있는 곳에 @를 넣어야합니다.
Nick

1

phpinfo ()를 사용 Configuration File (php.ini) Path하고 php에 사용되는 구성 파일 경로를 검색 하십시오. PHP는 실행중인 환경에 따라 여러 구성 파일을 가질 수 있습니다. 일반적으로 콘솔의 경우 다음과 같습니다.

/etc/php5/cli/php.ini

아파치로 실행되는 PHP의 경우 다음과 같습니다.

/etc/php5/apache2/php.ini

그런 다음 error_reporting필요한 방식 을 설정 하십시오.

http://www.phpknowhow.com/configuration/php-ini-error-settings/ http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-phpini- 파일


1

일부 사람들이 언급했듯이 코드 작성자 인 경우 이러한 오류, 알림 등을 모두 수정해야합니다. 이는 수정하지 않는 것보다 장기적으로 더 많은 문제를 일으킬 수 있기 때문입니다 (특히 OS를 업그레이드 할 때). 서버의 경우 클라이언트 화면이 아닌 로그에만 오류가 표시되어야합니다.

따라서 브라우저의 오류를 방지 display_errors하려면 이미 찾은 플래그 를 사용하십시오 .

display_errors = Off

이제 진짜 문제는 다른 사람의 코드를 실행할 때입니다. 이 경우 코드를 수정하면 해당 코드를 업그레이드 할 때마다 덮어 쓸 수 있습니다. 그 코드를 유지하는 것은 지루합니다.

제 경우 crontab에는 wp-cron.php스크립트 가 가끔씩 실행되도록 PHP를 실행하고 있습니다. 내 이메일로 오류가 전송되었는데, 10 분마다 하나의 이메일을 받으면 지루해졌습니다! 그러나이 경우 Wordpress 시스템에는 a가 포함 된 구성 파일이 있으며 함수 WP_DEBUG를 호출 error_reporting()하므로 error_reporting명령 줄 에서 변수 를 변경하려고하면 작동하지 않습니다. 대신 wp-config.php루트 폴더 의 파일 을 편집하고 이로 WP_DEBUG설정되어 있는지 확인해야합니다 false. 그렇지 않으면 모든 경고와 알림이 항상 표시됩니다.


0

상수가 이미 정의되어 있는지 확인할 수 있습니다.

<?php
if (!defined('MYCONST'))
    define('MYCONST', 'Weeha!');
?>

0

기본값이 On이기 때문에 php.ini에서 display_errors 주석 처리가 작동하지 않는다고 생각합니다. 대신 'Off'로 설정해야합니다.

구성 변경 사항을 적용하려면 Apache를 다시 시작하는 것을 잊지 마십시오.

또한 런타임에 display_errors를 설정할 수 있지만 여기서 변경해도 치명적 오류에는 영향을주지 않습니다.

다른 사람들이 언급했듯이, 이상적으로는 개발 중에 가능한 최고 수준에서 error_reporting을 실행하고 display_errors를 활성화해야합니다. 처음 시작할 때는 성가 시지만 이러한 오류, 경고, 알림 및 엄격한 코딩 조언이 모두 합쳐져 더 나은 코더가 될 수 있습니다.


0

이중 정의 상수

여기서 특정 오류를 수정하려면 정의하기 전에 상수가 이미 정의되어 있는지 확인할 수 있습니다.

if ( ! defined( 'DIR_FS_CATALOG' ) ) 
  define( 'DIR_FS_CATALOG', 'something...' );

나는 개인적으로 코드베이스에서 상수에 대한 검색으로 DIR_FS_CATALOG시작한 다음 이중 정의를 이것으로 바꿉니다.

사례별로 PHP 알림을 인라인으로 숨기기

PHP는 @오류 제어 연산자를 제공하여 알림이나 경고를 발생시키는 특정 기능을 무시하는 데 사용할 수 있습니다.

이를 사용하면 코드에서 사례별로 알림 및 경고를 무시 / 비활성화 할 수 있으며, 이는 오류 또는 알림이 의도적이거나 계획적이거나 완전히 짜증나고 소스에서 해결할 수없는 상황에 유용 할 수 있습니다. . 배치 @의이 통지를 유발하고이 무시됩니다 함수 또는 VAR 전에.

예를 들면 다음과 같습니다.

// Intentional file error
$missing_file = @file( 'non_existent_file' );

이에 대한 자세한 내용은 PHP의 오류 제어 연산자 문서 에서 찾을 수 있습니다 .

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