초보자가 가장 많이 하는 PHP 버그 Top 10
코드를 작성합니다. 페이지를 새로고침합니다. 그런데 화면에는 아무것도 없는 하얀 빈 화면만 나타납니다.
이는 PHP가 기본적으로 오류를 조용히 넘어가기 때문입니다. 오류가 보이지 않으면 수정할 수도 없습니다.
개발을 시작할 때 파일 상단에 다음 줄을 추가하세요:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
이렇게 하면 PHP가 무엇이 잘못되었는지 강제로 보여줍니다. 운영 환경(production)에서는 이 설정을 사용하지 마세요.
흔히 발생하는 10가지 버그와 해결 방법을 소개합니다.
세미콜론 누락 (Missing Semicolons) PHP는 문장을 끝내기 위해 세미콜론이 필요합니다. 하나라도 빠지면 스크립트가 중단됩니다. 해결 방법: 항상 문장 끝에 세미콜론을 붙이세요.
느슨한 비교 (Loose Comparison)
==연산자는 비교하기 전에 타입을 변경합니다. 이는 잘못된 결과를 초래할 수 있습니다. 해결 방법:===를 사용하세요. 이는 값과 타입을 모두 확인합니다.정의되지 않은 변수 (Undefined Variables) 생성하지 않은 변수를 사용하면 로직 오류가 발생합니다. 해결 방법: null 병합 연산자(null coalescing operator)를 사용하세요.
$name = $_GET['name'] ?? 'Guest';전역 변수 범위 (Global Variable Scope) 함수는 함수 외부의 변수를 볼 수 없습니다. 해결 방법: 변수를 함수의 파라미터로 전달하세요.
SQL 인젝션 (SQL Injection) 사용자 입력을 쿼리에 직접 넣는 것은 위험합니다. 공격자가 데이터를 훔칠 수 있습니다. 해결 방법: 플레이스홀더(placeholder)를 사용하는 prepared statements를 사용하세요.
크로스 사이트 스크립팅 (XSS) 사용자 입력을 가공 없이 화면에 출력하면 브라우저에서 악성 스크립트가 실행될 수 있습니다. 해결 방법: 모든 출력에
htmlspecialchars()를 사용하세요.헤더 오류 (Header Errors) 브라우저로 텍스트나 공백을 보낸 후에는 헤더를 보낼 수 없습니다. 해결 방법:
header()호출을 파일 최상단에 배치하세요. 리다이렉트 후에는 항상exit()를 사용하세요.누락된 폼 키 (Missing Form Keys) 존재하지 않는 폼 키에 접근하면 오류가 발생합니다. 해결 방법: null 병합 연산자를 사용하여 기본값을 제공하세요.
Include vs Require
include명령은 파일이 없어도 경고만 띄웁니다. 스크립트는 계속 실행되다가 나중에 충돌이 발생합니다. 해결 방법: 데이터베이스 연결과 같은 중요한 파일에는require_once를 사용하세요.확인되지 않은 반환 값 (Unchecked Return Values) 많은 PHP 함수는 실패할 경우
false를 반환합니다. 다음 단계에서 이false값을 사용하면 충돌이 발생합니다. 해결 방법: 결과를 사용하기 전에 함수가false를 반환했는지 확인하세요.
더 나은 코드를 위한 요약:
• 개발 시에는 에러 리포팅을 켜두세요.
• == 대신 ===를 사용하세요.
• 반환 값을 확인하세요.
• 모든 사용자 입력을 정제(sanitize)하세요.
Source: https://dev.to/bikkisingh/top-10-php-bugs-every-beginner-makes-and-how-to-fix-them-1anh