0 투표
PHP 소스를 서버를 변경했더니, Strict Standards 메시지가 줄줄줄 나오는데 왜 나오는거죠?

PHP 버전이 바꿔서 그런것 같은데 이유를 알고 싶어요.

1 답변

0 투표

서버를 바꾸면서 PHP 버전/설정이 달라져서 “Strict Standards”가 화면에 출력되는 경우가 대부분입니다. 요지는 “에러가 새로 생겼다”기보단, 예전엔 숨겨져 있던(또는 낮은 레벨이었던) 경고가 이제는 표시되는 거예요.

왜 뜨나요?

  • PHP 버전 차이: PHP 5.x 시절엔 E_STRICT(Strict Standards)가 자주 보였고, 오래된 라이브러리/프레임워크에서 특히 많이 발생합니다.
  • error_reporting 설정 차이: 새 서버에서 error_reportingE_STRICT가 포함되어 있거나, display_errors=On이라서 화면에 노출됩니다.
  • 대표 원인(흔한 패턴)

    • 상속/인터페이스 구현 시 메서드 선언이 부모/인터페이스와 완전히 일치하지 않음

      • 파라미터 개수/타입, 참조(&), 기본값, static, visibility(public/protected) 등이 다름
    • __construct()/클래스명 생성자 혼용 같은 구버전 코드 관성
    • 오래된 PEAR/레거시 프레임워크 코드

해결 방법(권장 순서)

  1. 코드를 수정(근본 해결) Strict Standards가 가리키는 파일/라인을 보고 해당 메서드 시그니처를 부모/인터페이스와 동일하게 맞춥니다. (장기적으로 제일 안전)

  2. 운영 환경에선 화면 출력만 끄기(노출 방지) 운영에서 화면에 경고가 줄줄 나오면 보안/UX에 안 좋아서 보통 이렇게 합니다.

    • php.ini 또는 vhost에서:

      • display_errors = Off
      • log_errors = On (로그로만 남김)
  3. Strict만 숨기기(임시방편) 코드 수정이 당장 어렵다면:

    • php.ini에서 error_reporting에서 E_STRICT를 제외
    • 또는 PHP 코드에서(임시):

      error_reporting(E_ALL & ~E_STRICT);
      

    다만 이건 “안 보이게만” 하는 거라, 추후 업그레이드 시 더 큰 문제로 이어질 수 있어요.


원하시면 더 정확히 짚어드릴게요. Strict Standards 메시지 중 2~3줄만(첫 줄의 파일/라인 포함) 그대로 붙여주시면, 어떤 케이스(메서드 선언 불일치인지, 라이브러리 문제인지)인지 바로 설명해드릴게요.

구로역 맛집 시흥동 맛집
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
...