브 라 우 저 로 하여 금 파일 http 머리 를 다운로드 하 게 하 다
Content-Disposition
HTTP Header 의 Content-Disposition:attachment 를 사용 하면 다운로드 할 때 다운로드 대화 상 자 를 강제로 팝 업 할 수 있 습 니 다.
HTTP 프로 토 콜 규정 상 통신 내용 은 US ASCII 인 코딩 을 사용 하 는데 영문 문자 집합 만 사용 할 수 있다.다른 문자 집합 을 사용 하려 면 RFC 3986 에 따라 백분율 로 문자열 을 인 코딩 해 야 합 니 다.
Content-Disposition: attachment; filename=filename.ext
Content-Disposition: attachment; filename*=charset'lang'encoded-filename.ext
인 코딩 을 하지 않 으 면 파일 이름 을 저장 하 는 것 이 어 지 러 울 수 있 습 니 다.다음 그림:
그러나 Content-Disposition 에 관 한 RFC 6266 규범 은 2011 년 6 월 에 야 HTTP 기준 에 포함 되 었 다.브 라 우 저 에 있어 서 저 는 주류 브 라 우 저 를 테스트 했 습 니 다.Firefox,Chrome,Opera,Safari 는 모두 새로운 표준 에 규정된 filename 을 지원 합 니 다.예상 치 못 하 게 모든 악의 IE 는 이 규범 을 지원 하지 않 습 니 다.하지만 IE 10 도 filename 을 지원 하지 않 는 다 는 사실 에 놀 랐 습 니 다.
Content-Disposition 의 PHP 코드 를 다음 과 같이 출력 합 니 다.
if ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], "MSIE" ) > 0 )
{
header ( 'Content-Disposition: attachment; filename="' . rawurlencode ( $originfile ) . '"' );
}
else
{
header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode ( $originfile ) );
}
인 코딩 에 주의 할 때
rawurlencode
을 사용 하 는 것 이 아니 라 urlencode
을 사용 하 는 것 입 니 다.이들 의 차 이 는 전자 가 빈 칸 을%20 으로 인 코딩 하 는 것 이 고 후 자 는+입 니 다.stackoverflow 에서 이 두 함수 에 대해 더 자세 한 토론 이 있 습 니 다.PHP-urlencode vs rawurlencode?Content-Type
브 라 우 저 는 이미 알 고 있 는 형식의 파일(예 를 들 어 jpg,pdf,txt 등)을 브 라 우 저 에서 직접 엽 니 다.http 헤더 의 Content-type 을 설정 하여 브 라 우 저가 인식 하 는 파일 형식 을 변경 합 니 다.여기 서 Content-Type 을 octet-stream,즉 바 이 너 리 파일 흐름 으로 설정 합 니 다.이렇게 하면 브 라 우 저 는 브 라 우 저 에서 열 리 지 않 고 파일 을 직접 열 수 있 습 니 다.
Content-Type: application/octet-stream
전체 PHP 코드
$filename = ' .txt';
header('Content-Type: application/octet-stream');
if ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], "MSIE" ) > 0 )
{
header ( 'Content-Disposition: attachment; filename="' . rawurlencode ( $originfile ) . '"' );
}
else
{
header( 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode ( $originfile ) );
}
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: binary");
header('Pragma: public');
header("Content-Length: ".filesize($filename));
일반적인 MIME 형식 예 표:
번호
내용 유형
파일 확장자
묘사 하 다.
1
application/msword
doc
Microsoft Word
2
application/octet-stream
dms lha lzh exe class
실행 가능 프로그램
3
application/pdf
Adobe Acrobat
4
application/postscript
ai eps ps
PostScript
5
appication/powerpoint
ppt
Microsoft Powerpoint
6
appication/rtf
rtf
rtf 격식.
7
appication/x-compress
z
unix 압축 파일
8
application/x-gzip
gz
gzip
9
application/x-gtar
gtar
tar 문서. (gnu 격식. )
10
application/x-shockwave-flash
swf
MacroMedia Flash
11
application/x-tar
tar
tar(4.3BSD)
12
application/zip
zip
winzip
13
audio/basic
au snd
sun/next 음성 파일
14
audio/mpeg
mpeg mp2
Mpeg 음성 파일
15
audio/x-aiff
mid midi rmf
Midi 격식.
16
audio/x-pn-realaudio
ram ra
Real Audio 소리.
17
audio/x-pn-realaudio-plugin
rpm
Real Audio 플러그 인
18
audio/x-wav
wav
Microsoft Windows 소리.
19
image/cgm
cgm
컴퓨터 그래 픽 메타 파일
20
image/gif
gif
COMPUSERVE GIF 이미지
21
image/jpeg
jpeg jpg jpe
JPEG 이미지
22
image/png
png
PNG 이미지
23
text/html
HTML
24
text/plain
TXT
25
text/xml
XML
26
text/json
json 문자열