본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP 서버 함수 — 날짜 · 파일 · 디렉토리 · 리다이렉트 완전 정리

by 왕진 2026. 6. 11.
반응형

 

 

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 분해
pathinfo() 결과
dirname: /var/www/html/myapp
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, 티스토리
반응형

댓글