반응형
Web Development · PHP data.php + require
data.php — 변수만 담은 파일과
require로 불러쓰는 패턴
데이터 파일을 분리하고 다른 파일에서 끌어다 쓰는 가장 단순한 모듈 패턴
시작 오늘 분석할 코드
이 파일은 로직이 없다. 단지 두 변수를 선언하고 끝난다. 짝이 되는 require.php가 이 파일을 읽어 들여(require) 변수 값을 사용하는 구조다 — PHP 초창기의 대표적인 모듈 분리 패턴.
<?php $name = "○철수"; $message = "등록 감사드립니다."; ?>
이 파일을 직접 브라우저로 열면 아무것도 보이지 않는다 (출력이 없으니까). 의미는 다른 파일이
require("data.php")로 가져갔을 때 비로소 살아난다.짝이 되는 require.php (참고)
<HTML><HEAD>...</HEAD><BODY> <?php require("data.php"); // data.php를 통째로 이 자리에 끼워 넣음 print "$name 님<BR>"; print "$message<BR>"; ?> </BODY></HTML>
최종 출력 (require.php를 실행했을 때)
○철수 님
등록 감사드립니다.
등록 감사드립니다.
용어 용어 정리
$name사용자 이름을 담는 변수
$message화면에 표시할 메시지 변수
require다른 PHP 파일을 통째로 끼워 넣는 명령
데이터 파일로직 없이 값만 정의해둔 파일
모듈 분리코드 역할별로 파일을 나누는 설계
변수 선언$ 기호 + 이름 + 값 = …
스코프 공유require된 파일은 같은 스코프 사용
경로상대/절대 경로로 파일 위치 지정
1 왜 변수만 담은 파일을 만드는가?
한 파일 안에 모든 코드를 다 적어도 동작은 한다. 하지만 프로젝트가 커지면 역할별로 파일을 나누는 게 유지보수에 유리하다.
예시 시나리오
· DB 접속 정보 —
· 사이트 공통 메시지 —
· 회원 정보 —
· DB 접속 정보 —
config.php에 한 번만 적고 어디서든 require· 사이트 공통 메시지 —
messages.php로 분리해 다국어 대응· 회원 정보 —
user.php에 모아두고 여러 페이지에서 공유※ 이번 코드의
data.php는 학습용으로 단순화된 버전. 실무에서 비밀번호·API 키 같은 민감 데이터는 이렇게 평문 변수로 두지 않는다 (환경변수 사용).2 변수 선언 — $ 기호와 대입
$name = "○철수"; //└┬┘ └───┬───┘ // 변수명 값 (문자열)
| 요소 | 역할 | 특징 |
|---|---|---|
$ |
"이건 변수다" 표시 | PHP는 모든 변수에 $ 필수 |
name |
변수 이름 | 영문·숫자·_ 가능, 첫글자 숫자 불가 |
= |
대입 (오른쪽을 왼쪽에 넣음) | 비교(==)와 다름! |
"○철수" |
문자열 값 | 큰따옴표 안은 변수 치환 가능 |
; |
문장 끝 | 매 문장 뒤에 필수 |
반응형
3 require란? — 파일 통째로 끼워 넣기
require("data.php")는 그 파일의 내용을 그대로 그 자리에 복사·붙여넣기하는 효과를 낸다.
// 실행 전 (require.php 안) require("data.php"); print "$name 님<BR>"; print "$message<BR>"; // 내부적으로는 이렇게 해석된다 ↓ $name = "○철수"; ← data.php 내용이 끼워짐 $message = "등록 감사드립니다."; print "$name 님<BR>"; ← $name 사용 가능 (방금 정의됐으니) print "$message<BR>";
즉,
require로 가져온 변수는 같은 스코프(함수 안이면 함수 안, 전역이면 전역)에 살아 있다. 그래서 그 다음 줄부터 바로 $name을 쓸 수 있다.4 require / require_once / include / include_once
"파일을 끼워 넣는" 명령에는 4가지 변형이 있다.
| 명령 | 실패 시 | 중복 호출 방지 | 언제 쓰나 |
|---|---|---|---|
require |
치명적 오류 (스크립트 중단) | 없음 (여러 번 끼워짐) | 없으면 안 되는 핵심 파일 |
require_once |
치명적 오류 | 있음 (한 번만) | 설정·클래스 정의 파일 |
include |
경고만 (계속 실행) | 없음 | 없어도 큰 문제 없는 부속 파일 |
include_once |
경고만 | 있음 | 여러 번 호출 가능성 있는 부속 |
※ 실무 권장
- 설정·클래스·함수 정의:
require_once(안전 + 중복 방지) - 일회성 템플릿:
require또는include - 현대 프로젝트에서는
require대신 Composer autoloader를 사용
5 실행 흐름 단계별 추적
1
브라우저가 require.php 요청웹서버가 PHP 인터프리터에 파일 전달
2
HTML 태그 부분 출력<HTML><HEAD>... 그대로 브라우저로 전송
3
<?php require("data.php"); ?>data.php를 읽어 그 자리에 코드 삽입
4
$name = "○철수"; $message = "..."; 실행두 변수가 메모리에 생성됨
5
print "$name 님<BR>""○철수 님<BR>" 브라우저로 출력
6
print "$message<BR>""등록 감사드립니다.<BR>" 출력
7
나머지 HTML 출력 후 종료</BODY></HTML> 까지 전송
6 require에서 파일을 못 찾으면?
require — 치명적
파일 없음 →
스크립트 거기서 즉시 중단
뒤의 코드 실행 안 됨
Fatal error스크립트 거기서 즉시 중단
뒤의 코드 실행 안 됨
include — 부드러움
파일 없음 → 경고만
뒤의 코드는 계속 실행
(변수가 없으니 다른 에러 가능)
뒤의 코드는 계속 실행
(변수가 없으니 다른 에러 가능)
"이 파일이 없으면 답이 없다"면 require, "있으면 좋고 없어도 그만"이면 include를 쓴다는 게 일반적인 선택 기준.
7 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
| 경로 오타 (data.php 위치) | require: 치명적 오류 | 상대 경로 정확히, 또는 절대 경로 |
| 같은 파일을 여러 번 require | 변수 재선언, 클래스 중복 정의 오류 | require_once 사용 |
| require 안에 출력 후 헤더 변경 | "headers already sent" 오류 | 출력은 헤더 호출 뒤에 |
data.php에 닫는 ?> 뒤 빈 줄 |
의도치 않은 공백·BOM 출력 | 순수 PHP 파일은 ?> 생략 권장 |
| data.php를 직접 URL로 접근 | 데이터·비밀이 노출될 수 있음 | 웹 루트 밖에 두거나 .htaccess 차단 |
8 한 단계 발전 — 배열로 묶어 반환하기
현대 PHP에서는 변수를 흩어 정의하기보다 배열로 묶어 return하는 패턴이 권장된다.
// data.php (현대식) <?php return [ 'name' => '○철수', 'message' => '등록 감사드립니다.', ]; // 사용 측 $data = require __DIR__ . '/data.php'; print "{$data['name']} 님<BR>"; print "{$data['message']}<BR>";
※ 이 패턴의 장점
- 데이터가 어디서 왔는지 명시적 (
$data변수) - 같은 파일을 여러 번 가져와도 변수 충돌 없음
- 전역 스코프 오염 없음 — 함수 안에서도 안전
- Laravel·Symfony 같은 프레임워크의 config 관행
핵심 한 줄 요약
data.php로직 없이 변수만 담은 데이터 파일
변수 선언$이름 = 값; — 이름 시작은 영문/_
require다른 PHP 파일을 그 자리에 통째로 삽입
스코프 공유require된 변수는 호출 측 스코프에서 사용 가능
변형 4종require / require_once / include / include_once
실패 시require는 중단, include는 계속
현대식배열을 return하고 변수에 담아 받기
반응형
'php' 카테고리의 다른 글
| PHP return — 함수 결과 돌려주기 + strlen 바이트 검사 완전 정리 (0) | 2026.06.13 |
|---|---|
| PHP 사용자 정의 함수 — 매개변수 없는 함수 완전 정리 (0) | 2026.06.13 |
| PHP 함수 기본값 매개변수 — 로그인 분기 완전 정리 (0) | 2026.06.13 |
| PHP 함수 매개변수와 변수 스코프 — 전역/지역/삼항 완전 정리 (1) | 2026.06.13 |
| PHP foreach + 중첩 if — 키별 한국어 라벨 변환 완전 정리 (1) | 2026.06.13 |
왕진 블로그

댓글