소개
데이터 URI(data URI) 스킴은 1998년에 발표된 RFC 2397에서 정의되었습니다. 이 스킴은 웹 페이지에 외부 리소스처럼 인라인(in-line) 데이터를 직접 포함할 수 있는 메커니즘을 제공합니다. PHP는 이러한 데이터 URI 표현을 위해 data:// 스트림 래퍼(wrapper)를 지원하며, 이를 활용하면 별도의 파일 없이도 문자열이나 바이너리 데이터를 파일처럼 읽고 처리할 수 있습니다.
데이터 URI는 다음과 같은 문법으로 표현됩니다.
data:// 문법
data:[미디어 타입][;base64],데이터
매개변수 설명
미디어 타입(media type) − 데이터의 MIME 유형을 지정합니다. 기본값은 text/plain입니다.
base64 확장자(선택 사항) − 앞부분과 세미콜론(;)으로 구분되며, 데이터 내용이 바이너리-텍스트 인코딩 방식인 Base64로 인코딩된 바이너리 데이터임을 나타냅니다.
데이터(data) − 앞부분과 쉼표(,)로 구분되며, 문자로 표현된 0개 이상의 옥텟(octet) 시퀀스입니다.
활용 예제
1. 문자열을 base64로 인코딩하여 data:// URI로 읽기
다음 예제는 문자열을 base64 형식으로 인코딩한 후, 이를 data:// URI의 데이터로 사용하는 방법을 보여줍니다.
<?php
$string="TutorialsPoint India (p) Ltd";
$b64=base64_encode($string);
echo file_get_contents('data://text/plain;base64,'. $b64);
?>2. 파일 내용을 읽어 base64로 변환하기
file_get_contents() 함수를 사용하면 파일에서 데이터를 읽어온 뒤 base64 형식으로 변환할 수 있습니다.
<?php
$string=file_get_contents("test.txt");
$b64=base64_encode($string);
echo file_get_contents('data://text/plain;base64,'. $b64);
?>3. text/html 미디어 타입 사용하기
다음 예제는 data:// 래퍼에서 미디어 타입으로 text/html을 지정하여 HTML 콘텐츠를 처리하는 방법을 보여줍니다.
<?php
$string=file_get_contents("test.html");
$b64=base64_encode($string);
echo file_get_contents('data://text/html;base64,'. $b64);
?>참고 사항
data:// 래퍼는 작은 이미지, 아이콘, CSS 배경 등을 HTML이나 CSS에 직접 삽입해 HTTP 요청 수를 줄이는 용도로도 널리 활용됩니다. 다만 인코딩된 데이터가 원본보다 약 33% 더 커질 수 있고, 긴 데이터는 URL 길이 제한에 걸릴 수 있으므로 크기가 큰 리소스에는 적합하지 않습니다. 또한 신뢰할 수 없는 입력을 그대로 data:// URI로 처리하면 보안 위험이 있을 수 있으므로, 입력 검증을 반드시 수행하는 것이 좋습니다.