PHP 8로 바꾼 뒤 기존 사이트에서 치명적 오류가 나요
PHP 8 전환 뒤 오래된 코드에서 타입·문법 오류가 발생할 때 오류 원문과 변경된 실행 조건을 비교하는 시작 Guide입니다.
빠른 답변
PHP 8 전환 뒤 오류가 나면 런타임 버전·실행 방식·오류 파일과 행을 먼저 고정하고 TypeError와 Parse error를 구분해야 합니다. 운영 버전을 즉시 되돌리기보다 동일 조건의 스테이징에서 입력값과 호환성 변경을 확인합니다.
- 적용 범위
- 이 가이드의 시작 증상과 각 분기 조건이 일치하는 경우
- 출처 확인일
- 2026-07-31
- 최종 검토
- 2026-07-31
- 수정일
- 2026-08-04
- 정정 이력
- 2026-07-29 이후 기록 없음
- 대상
- 사이트 운영자, 쇼핑몰 운영자, 웹 에이전시, 프리랜서
이 가이드가 맞는 경우
- PHP 치명적 오류
- 애플리케이션 오류 메시지
상황별 다음 단계
호스팅사·개발자에게 전달할 내용
변경 전 기록
- 발생한 URL 또는 기능, 오류 원문, 발생 시각을 기록합니다.
- 최근 배포·설정·도메인·플러그인·호스팅 변경이 있었다면 변경 시각과 범위를 함께 기록합니다.
- 비밀번호·인증 토큰·세션 쿠키·주문자 정보·결제 정보를 문의 자료에 포함하지 않습니다.
알아둘 점
PHP 8 전환 뒤 오래된 코드에서 타입·문법 오류가 발생할 때 오류 원문과 변경된 실행 조건을 비교하는 시작 Guide입니다. 오류 원문과 발생 환경이 일치하지 않으면 원인을 단정하지 않습니다.
먼저 기록할 것
- 화면·브라우저 개발자 도구·서버 로그 중 어디에서 오류를 확인했는지 기록합니다.
- 오류 문구·상태 코드·요청 주소·발생 시각을 가능한 한 원문 그대로 보존합니다.
- 최근 배포·설정·도메인·플러그인·호스팅 변경 여부를 기록합니다.
- 문의 자료에서는 비밀번호·토큰·쿠키·고객 정보·결제 정보를 제거합니다.
상황별 다음 단계
count()에 배열·Countable이 아닌 값이 전달되면 TypeError: count(): Argument #1 ($value) must be of type Countable|array을 확인합니다.- 문자열 오프셋 접근 타입 오류가 보이면 TypeError: Cannot access offset of type string on string을 확인합니다.
- PHP 코드 파싱 오류가 Parse error로 표시되면 Parse error: syntax error, unexpected 'new' (T_NEW)을 확인합니다.
확인 순서
- 문제를 재현하는 URL 또는 기능을 한 가지로 고정합니다.
- 위 Problem의 관찰값과 현재 화면·로그가 일치하는지 비교합니다.
- 한 번에 하나의 설정이나 코드만 확인하고, 변경 전 값을 보관합니다.
- 수정 후 같은 브라우저·주소·기능에서 다시 확인합니다.
PHP 8 전환 후 확인할 값
| 관찰값 | 판정 기준 | 다음 확인 |
|---|---|---|
| PHP 런타임만 바뀌고 코드 변경은 없음 | 이전 PHP에서 허용되던 타입·문법이 새 버전에서 오류가 되었을 수 있습니다. | 오류 파일·행과 PHP 8 호환성 변경 항목을 비교합니다. |
TypeError 또는 Argument #1이 보임 | 함수가 기대하는 타입과 실제 입력값이 달라진 상태입니다. | 입력값을 기록하고 해당 함수 호출부를 스테이징에서 재현합니다. |
Parse error가 보임 | 문법 분석 단계에서 실행이 중단된 상태입니다. | 오류 파일·행과 배포된 파일이 같은지 확인합니다. |
운영 PHP 버전을 즉시 여러 단계 내리지 말고, 현재 버전·실행 방식(FPM/Apache 등)·확장 모듈과 오류 시각을 기록한 뒤 스테이징에서 한 항목씩 수정합니다.
수정 후 재확인
- 동일 PHP 버전의 스테이징에서 오류 URL과 관련 기능을 재현합니다.
- 오류 로그가 사라진 뒤 로그인·업로드·결제처럼 영향을 받을 수 있는 기능을 각각 실행합니다.
- CLI와 웹 요청의 PHP 버전·확장 모듈이 다른지 확인합니다.
- 배포 후 같은 요청을 반복해 오류가 재발하지 않는지 기록합니다.
관련 점검표: PHP 런타임 버전 운영 확인표, 서버 오류 원인 구간 확인
오진하지 않기
이 Guide의 제목이나 플랫폼 이름만으로 원인을 확정하지 않습니다. Problem 문서의 조건과 실제 관찰값이 다르면 설정을 변경하지 말고 오류 원문과 환경을 다시 기록합니다.
참고 자료
PHP 8.0 backward incompatible changes (새 창에서 열림)
The PHP Group · 공식 자료 · 확인 범위: 공식 문서가 오류의 의미와 확인 범위를 설명합니다. · 확인일: 2026-07-31
Classes and Objects - PHP Manual (새 창에서 열림)
The PHP Group · 공식 자료 · 확인 범위: 공식 문서가 오류의 의미와 확인 범위를 설명합니다. · 확인일: 2026-07-31