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_errors로 0또는 사용 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.