반응형
Web Development · PHP Built-ins
PHP 서버 함수
날짜 · 파일 · 디렉토리 · 리다이렉트
date/time/mktime, file_get/put, copy/unlink, mkdir/rmdir, header(Location)
시작 서버에서만 할 수 있는 일들
PHP가 서버에서 돌기 때문에 파일 시스템에 접근하고, 날짜/시간을 다루고, 다른 페이지로 리다이렉트할 수 있다. 이번엔 그 핵심 함수들을 모두 정리한다.
용어 핵심 키워드
timestamp1970-01-01 UTC부터의 초
time()현재 timestamp
date()timestamp → 포맷 문자열
mktime()시,분,초,월,일,년 → timestamp
checkdate()날짜 유효성 검사
file_get_contents파일 → 문자열
file_put_contents문자열 → 파일
is_readable / is_file / is_dir파일/폴더 존재 확인
copy파일 복사
unlink파일 삭제
mkdir / rmdir폴더 생성/삭제
pathinfo경로를 파트로 분해
header()HTTP 헤더 전송
Location리다이렉트 헤더
mb_convert_encoding인코딩 변환
preg_match정규식 매칭
1 time · date — 현재 시간과 포맷
<?php $now = time(); // 현재 timestamp (예: 1746115200) // 일주일 뒤 $timestamp = time() + (60 * 60 * 24) * 7; $next_week = date('Y년m월d일 H시i분s초', $timestamp); print $next_week; // 2026년05월08일 09시00분00초 ?>
date() 포맷 문자
| 포맷 | 의미 | 예 |
|---|---|---|
Y |
4자리 년도 | 2026 |
y |
2자리 년도 | 26 |
m |
2자리 월 (01~12) | 05 |
n |
월 (1~12) | 5 |
d |
2자리 일 (01~31) | 01 |
H |
24시간 (00~23) | 14 |
h |
12시간 (01~12) | 02 |
i |
분 (00~59) | 30 |
s |
초 (00~59) | 45 |
D |
요일 영문 약어 | Mon |
l |
요일 영문 풀이름 | Monday |
💡 strtotime() 으로 더 깔끔하게 —
date('Y-m-d', strtotime('+7 days'))처럼 영어 표현 가능. 'next monday', '-1 month'도 OK.2 mktime · checkdate
<?php // 특정 날짜의 timestamp — mktime(시,분,초,월,일,년) $timestamp = mktime(0, 0, 0, 5, 7, 2014); // 2014년 5월 7일 00:00:00의 timestamp // 날짜 유효성 검사 if (!checkdate(2, 31, 2014)) { // 2월 31일은 없음 print "올바른 날짜를 입력하세요."; } ?>
⚠ mktime의 인자 순서는 일반적이지 않다 — 시간(시,분,초)이 먼저, 그 다음 날짜(월,일,년). 헷갈리면 매번 매뉴얼 보면서 쓰자.
3 file_get_contents · file_put_contents
<?php // 파일 읽기 $filename = "test.txt"; if (is_readable($filename)) { $contents = file_get_contents($filename); print $contents; } else { print $filename."는 읽어 들일 수 없습니다."; } // 파일 쓰기 (덮어쓰기) file_put_contents("test.txt", "abcdefghijklmn"); // 파일 끝에 추가 file_put_contents("log.txt", "새 줄\n", FILE_APPEND); ?>
※ 파일 작업 보안
is_readable(),is_file()로 존재 확인 후 작업- 사용자 입력으로 받은 파일명은 경로 우회 공격 위험 —
basename()으로 정화 - 업로드 파일은 별도 폴더에 저장하고 실행 권한 차단
4 copy · unlink — 파일 복사/삭제
<?php if (copy("test.txt", "test.bak")) { print "복사에 성공하였습니다."; } else { print "복사 할 수 없습니다."; } $filename = "test.txt"; if (is_file($filename) && unlink($filename)) { print $filename."를 삭제하였습니다."; } ?>
⚠ unlink는 복구 불가 — Windows에서
del, Linux에서 rm처럼 휴지통도 안 거치고 영구 삭제. 사용자 입력으로 받은 경로는 절대 그대로 unlink하지 말 것.반응형
5 mkdir · rmdir — 폴더 만들기/삭제
<?php $dirname = "temp"; if (!is_dir($dirname) && mkdir($dirname)) { print $dirname."를 만들었습니다."; } rmdir("temp"); // 폴더 삭제 (비어있어야 함) ?>
📌
rmdir은 빈 폴더만 지운다. 폴더 안에 파일이 있으면 실패. 재귀 삭제는 직접 구현하거나 RecursiveIteratorIterator 사용.6 pathinfo — 경로 분해
<?php $pathname = pathinfo(__FILE__); // __FILE__ = 현재 PHP 파일의 절대 경로 print $pathname['dirname']; // 파일이 있는 폴더 경로 print $pathname['basename']; // 파일명.확장자 print $pathname['filename']; // 확장자 제외 파일명 print $pathname['extension']; // 확장자 (점 제외) ?>
예: /var/www/html/myapp/index.php 분해
dirname: /var/www/html/myapp
basename: index.php
filename: index
extension: php
basename: index.php
filename: index
extension: php
7 header() — 리다이렉트와 응답 제어
<?php header("Location:http://www.naver.com/"); exit; // 리다이렉트 후 추가 코드 실행 방지 ?>
header()는 HTTP 응답 헤더를 보낸다. Location 헤더로 다른 URL로 강제 이동시킨다. 로그인 후 메인으로, 처리 완료 후 결과 페이지로 등에 자주 사용.
⚠ header() 호출 전 출력 금지 —
echo "1"; header(...);는 에러. HTTP 헤더는 본문보다 먼저 가야 한다. PHP 파일 시작 전에 공백 한 줄도 안 됨.자주 쓰는 header()들
| header | 의미 |
|---|---|
Location: ... |
다른 URL로 리다이렉트 |
Content-Type: application/json |
JSON 응답 |
Content-Type: text/csv |
CSV 다운로드 |
HTTP/1.1 404 Not Found |
404 에러 상태 |
Cache-Control: no-cache |
캐시 비활성화 |
8 mb_convert_encoding — 인코딩 변환
<?php $contents = "가나다라마바사아자차"; // UTF-8 $contents = mb_convert_encoding($contents, "EUC-KR", "UTF-8"); file_put_contents("test.txt", $contents); // EUC-KR로 인코딩된 파일 생성 ?>
옛 시스템(EUC-KR, CP949)과 데이터 주고받을 때 사용. 현대 웹은 거의 다 UTF-8.
| 인코딩 | 한글 표현 | 사용 상황 |
|---|---|---|
| UTF-8 | 3바이트 | 현대 웹 표준 |
| EUC-KR / CP949 | 2바이트 | 구 Windows, 일부 한국 시스템 |
| UTF-16 | 2~4바이트 | Windows 내부, JS |
9 preg_match — 정규식 매칭
<?php $number = "123456"; if (preg_match("/^[0-9]+/", $number)) { print "숫자입니다!"; } $input = "abc123"; if (preg_match("/^[a-zA-Z]/", $input)) { print "첫 글자가 문자입니다!"; } ?>
정규식 기초
| 패턴 | 의미 |
|---|---|
/.../ |
슬래시로 감싸는 구분자 |
^ |
문자열 시작 |
$ |
문자열 끝 |
[0-9] |
숫자 한 글자 |
[a-zA-Z] |
영문 대소 한 글자 |
+ |
1번 이상 반복 |
* |
0번 이상 반복 |
? |
0번 또는 1번 |
{3,5} |
3~5번 |
💡 실전 예 — 이메일 검사
/^[\w.+-]+@[\w-]+\.[\w.-]+$/, 휴대폰 /^010-?\d{4}-?\d{4}$/, 비밀번호 길이 검사 /^.{8,}$/10 핵심 한 줄 요약
PHP — SERVER FUNCTIONS
현재 시간time() — Unix timestamp
timestamp 포맷date('Y-m-d H:i:s', $ts)
timestamp 만들기mktime(시,분,초,월,일,년)
파일 읽기file_get_contents($path)
파일 쓰기file_put_contents($path, $data, FILE_APPEND?)
파일 복사/삭제copy($src, $dst) / unlink($path)
폴더 생성/삭제mkdir($path) / rmdir($path) — 비어있어야
존재 확인is_file / is_dir / is_readable
경로 분해pathinfo(__FILE__) — dirname/basename/extension
리다이렉트header("Location: URL"); exit;
정규식preg_match("/^pattern$/", $str)
Tags
#PHP #date #time #mktime #fileGetContents #filePutContents #copy #unlink #mkdir #pathinfo #header #Location #pregMatch #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, date, time, mktime, fileGetContents, filePutContents, copy, unlink, mkdir, pathinfo, header, Location, pregMatch, 티스토리
반응형
'php' 카테고리의 다른 글
| jQuery Mobile 도서 관리 앱 — multi-page + WebSQL 완전 정리 (0) | 2026.06.11 |
|---|---|
| PHP form + confirm + view — 3단계 폼 처리 완전 정리 (0) | 2026.06.11 |
| PHP 정렬 · 배열 조작 · 문자열 함수 완전 정리 (0) | 2026.06.11 |
| PHP return · 변수 범위 · static · 문자열 함수 완전 정리 (0) | 2026.06.11 |
| PHP foreach · function · break · continue · require 완전 정리 (0) | 2026.06.11 |
왕진 블로그

댓글