PHP 5는 엄격한 표준 오류를 비활성화


175

엄격한 표준에 대한 오류보고를 비활성화하려면 맨 위에 PHP 스크립트를 설정해야합니다.

아무도 도와 줄 수 있습니까?


8
@ 451F : 여기서 핵심 단어는 "엄격한 표준"이라고 생각합니다. 이전 버전에 대해서는 모르겠지만 PHP 5.4.0에서는 E_ALL & ~E_DEPRECATED & ~E_STRICT프로덕션 용으로 오류보고를 설정하는 것이 좋습니다 . 엄격한 표준을 사용하지 말 것을 제안합니다.
가짜 코드 원숭이 Rashid

또한 php.ini 파일을 찾아서 / usr / local / php5 / lib /에 복사하십시오
yadhu

답변:


185

오류보고를 비활성화 하시겠습니까, 아니면 사용자가 보지 못하게 하시겠습니까? 일반적으로 프로덕션 사이트에서도 오류를 기록하는 것이 좋습니다.

# in your PHP code:
ini_set('display_errors', '0');     # don't show any errors...
error_reporting(E_ALL | E_STRICT);  # ...but do log them

그것들은 표준 시스템 로그에 기록되거나 error_log지시문을 사용하여 오류가 발생하는 위치를 정확하게 지정합니다.


11
명백하게 명시 적으로 말하면 : 물론 php.iniPHP 코드를 수정할 수없는 경우 파일 에서도 설정할 수 있습니다.
sschuberth

1
그러나 생산 과정에서 엄격한 오류를 기록하는 것도 좋지 않습니다. 중요하지 않은 알림으로 로그를 작성하므로 다음 문제 중 하나 또는 둘 다가 발생합니다. serverAdmin은 오류를 누락 / 무시하며 로그 디렉토리는 어느 시점에서 모든 서버 공간을 소비합니다.
랜스

4
이것은 나를 위해 작동하지 않습니다-가짜 코드 원숭이 Rashid의 E_ALL & ~ E_STRICT를 사용해야했습니다 아래 답변의 의견
besimple

1
내 php.ini에서 찾은 다음과 함께 어떻게 작동합니까? log_errors = On Vs ini_set ( 'display_errors', '0'); 마지막 한 세트가 이기는가?
착륙

@nate 코드를 게시 할 때 붙여 넣을 수있는 곳을 알려주십시오. 로 : 나는 그것을 넣어 위치를 모르는 php.ini또는 .htaccess내 PHP 코드 어딘가에 나.
Даниил Пронин

89

오류가 없습니다.

error_reporting(0);

또는 엄격하지 않은

error_reporting(E_ALL ^ E_STRICT);

모든 오류를 다시 표시하려면

error_reporting(-1);


56
+1 : ^한 가지 유형의 오류를 생략하는 데만 도움이 된다고 생각합니다 . 추가 유형을 끄려면 형식을 사용해야 E_ALL & ~E_DEPRECATED & ~E_STRICT합니다. 아니면 (E_ALL & ~(E_DEPRECATED | E_STRICT))형식 일 수도 있습니다.
가짜 코드 원숭이 Rashid

10
참고 : E_STRICT는 PHP 5.4 이후 E_ALL의 일부일뿐입니다
Fred Haslam

@FakeCodeMonkeyRashid 왜 그런지 궁금해? 아마도 증발 명령이 중요하기 때문에?
codeling

PHP에서 STRICT 오류 ini_set('error_reporting', E_ALL&~E_STRICT); 보고 억제 <5.4 PHP에서 STRICT 오류 보고 억제> = 5.4ini_set('error_reporting', E_ALL^E_STRICT);
Mel_T

나는 ( "and not") ^보다는 ( "xor") 를 사용 & ~하는 것은 나쁜 생각 임을 지적하고 싶다 ! 예를 들어 E_STRICT는 E_ALL의 일부이며 항상 그 일부가 될 것이라는 가정^ 에 따라 다릅니다 . E_ALL이 과거에 변경 되었기 때문에 이것은 나쁘다 (E_STRICT는 과거가 아니었지만 현재는 PHP 5.4 이후이다). 가정이 언젠가 실패하면 깨질뿐만 아니라 실제로 해야하는 것과 반대 되는 행동 을합니다. XOR ( )의 작동 방식으로 인해 E_STRICT 가 활성화 됩니다 . 그러나 현재 E_ALL 값에 관계없이 항상 E_STRICT를 비활성화합니다. 따라서 사용해야합니다. ^^& ~& ~
제이

31

위의 모든 솔루션이 정확합니다. 그러나 일반적인 PHP 응용 프로그램에 대해 이야기 할 때 필요한 모든 페이지에 포함시켜야합니다. 이 문제를 해결하는 방법 .htaccess은 루트 폴더를 통하는 것 입니다. 오류를 숨기려면 [파일에 다음 줄 중 하나를 입력하십시오]

php_flag display_errors off

또는

php_value display_errors 0

다음으로 오류보고를 설정하려면

php_value error_reporting 30719

30719이 어떻게되는지 궁금하다면 E_ALL (32767), E_STRICT (2048)는 실제로는 숫자 값을 보유하는 상수이며 ( 32767 - 2048 = 30719)


2
고마워-PHP 5.4.7의 트릭 (.htaccess 솔루션)을 수행했습니다. .ini 수정조차도 트릭을 수행했습니다.

나는 php_admin_value error_reporting이것을 vhost 설정에서 작동 시키기 위해 사용 했다.
Lou Terrailloune

@Seza, 맞습니다. 수정했습니다.
Starx

1
대부분의 E_STRICT 오류가 컴파일 타임이고 런타임에 재정의 될 수 없기 때문에 페이지에 대한 것이
아니라이

2
안녕하십니까, 늪을 사용하는 사람들을 위해 PHP> php settings >> display errors를 클릭하여 오류를 비활성화 할 수 있습니다. 체크되어 있으면 체크를 해제하십시오.
Hemang Rami

9

error_reporting 플래그 의 기본값 은 php.ini에 설정되어 있지 않은 경우 E_ALL & ~ E_NOTICE 입니다. 그러나 일부 설치 (특히 개발 환경을 대상으로하는 설치)에는 E_ALL | E_STRICT 가이 플래그의 값으로 설정되었습니다 ( 개발 중에 권장되는 값입니다 ). 경우에 따라, 특히 개발 환경에서 PHP 5.3 이전에 개발되었지만 PHP 5.3에서 정의한 모범 사례로 아직 업데이트되지 않은 일부 오픈 소스 프로젝트를 실행하려는 경우 일부 당신 같은 메시지. 이 상황에 대처하는 가장 좋은 방법은 E_ALLerror_reporting 플래그 의 값으로 설정 하는 것입니다.php.ini 또는 코드 (아마도 웹 루트의 index.php와 같은 프론트 컨트롤러에서 다음과 같이)

if(defined('E_STRICT')){
    error_reporting(E_ALL);
}

8

php.ini 세트에서 :

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

4

워드 프레스

워드 프레스 환경에서 작업하는 경우 워드 프레스는 함수 wp-includes / load.php 파일의 오류 수준을 설정합니다 wp_debug_mode(). 따라서이 함수가 호출 된 후 (git로 체크인되지 않은 파일에서 개발 전용) 레벨을 변경하거나 error_reporting()호출을 직접 수정해야 합니다


이것은 정말 유용합니다. 하나의 Wordpress 설치에 대해 디버그 모드를 사용했으며 이것이 수행되었음을 알지 못했습니다. 정보 주셔서 감사합니다!
Tim

2

프로덕션 용 소프트웨어에 깨끗하고 적합한 답변을 찾지 못했습니다.

/*
 * Get current error_reporting value,
 * so that we don't lose preferences set in php.ini and .htaccess
 * and accidently reenable message types disabled in those.
 *
 * If you want to disable e.g. E_STRICT on a global level,
 * use php.ini (or .htaccess for folder-level)
 */
$old_error_reporting = error_reporting();

/*
 * Disable E_STRICT on top of current error_reporting.
 *
 * Note: do NOT use ^ for disabling error message types,
 * as ^ will re-ENABLE the message type if it happens to be disabled already!
 */
error_reporting($old_error_reporting & ~E_STRICT);


// code that should not emit E_STRICT messages goes here


/*
 * Optional, depending on if/what code comes after.
 * Restore old settings.
 */
error_reporting($old_error_reporting);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.