𝗧𝗼𝗽 𝟭𝟬 𝗣𝗛𝗣 𝗕𝘂𝗴𝘀 𝗘𝘃𝗲𝗿𝘆 𝗕𝗲𝗴𝗶𝗻𝗻𝗲𝗿 𝗠𝗮𝗸𝗲𝘀
코드를 작성하고, 새로고침을 누릅니다. 그런데 화면에는 아무것도 없는 하얀 화면만 나타납니다.
이는 PHP가 기본적으로 오류를 조용히 넘어가기 때문입니다. 개발 중에는 오류를 강제로 표시하도록 설정해야 합니다.
파일 최상단에 다음 줄을 추가하세요:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
운영 환경(production)에서는 이 설정을 사용하지 마세요. 대신 파일 로그를 사용하세요.
흔히 발생하는 10가지 실수와 해결 방법은 다음과 같습니다:
세미콜론 누락 (Missing Semicolons) 세미콜론을 잊으면 PHP가 작동을 멈춥니다. 종종 아무런 메시지 없이 프로그램이 중단되기도 합니다. 해결 방법: 모든 문장이 세미콜론으로 끝나는지 확인하세요.
느슨한 비교 (Loose Comparison: == vs ===) 이중 등호는 타입 변환(type coercion)을 수행합니다. 이는 논리적 오류로 이어질 수 있습니다. 해결 방법: 삼중 등호(===)를 사용하세요. 값과 타입을 모두 확인합니다.
정의되지 않은 변수 (Undefined Variables) 변수에 값을 할당하기 전에 사용하면 논리가 깨집니다. 해결 방법: null 병합 연산자(null coalescing operator)를 사용하세요. 예시:
$name = $_GET['name'] ?? 'Guest';전역 변수 범위 (Global Variable Scope) 함수는 함수 외부의 변수를 볼 수 없습니다. 해결 방법: 변수를 함수의 매개변수(parameter)로 전달하세요.
SQL 인젝션 (SQL Injection) 사용자 입력을 사용하여 쿼리를 작성하면 해커가 데이터를 훔칠 수 있습니다. 해결 방법: 플레이스홀더(?)를 사용하는 prepared statement를 사용하세요.
교차 사이트 스크립팅 (Cross-Site Scripting: XSS) 사용자 입력을 직접 출력하면 브라우저에서 악성 스크립트가 실행될 수 있습니다. 해결 방법: 출력을
htmlspecialchars()로 감싸세요.헤더가 이미 전송됨 (Headers Already Sent) 브라우저에 이미 텍스트를 보냈다면 사용자를 리다이렉트할 수 없습니다. 공백 하나만 있어도 이 오류가 발생합니다. 해결 방법:
header()호출을 코드 최상단에 배치하세요. 리다이렉트 후에는 항상exit()를 사용하세요.정의되지 않은 배열 키 (Undefined Array Keys) 존재하지 않는 폼 키에 접근하면 경고(warning)가 발생합니다. 해결 방법: 모든
$_POST및$_GET데이터에 null 병합 연산자를 사용하세요.Include vs Require
include는 파일이 누락되어도 경고만 표시합니다. 스크립트는 계속 실행되다가 나중에 오류를 일으키며 중단됩니다. 해결 방법: 데이터베이스 연결과 같은 중요한 파일에는require_once를 사용하세요.확인되지 않은 반환 값 (Unchecked Return Values) 많은 PHP 함수는 실패 시
false를 반환합니다. 이 결과를 즉시 사용하면 더 많은 오류가 발생할 수 있습니다. 해결 방법: 결과를 사용하기 전에false인지 확인하세요.
성공을 위한 요약:
- 개발 환경에서는 오류 보고를 활성화하세요.
- 모든 비교에
===를 사용하세요. - 모든 사용자 입력을 정제(sanitize)하세요.
- 반환 값을 확인하세요.
Source: https://dev.to/bikkisingh/top-10-php-bugs-every-beginner-makes-and-how-to-fix-them-1anh