> 백엔드 개발 > PHP 튜토리얼 > PHP 파일 다운로드 코드 공유_php 기술

PHP 파일 다운로드 코드 공유_php 기술

WBOY
풀어 주다: 2016-05-16 20:38:02
원래의
1070명이 탐색했습니다.

간단한 파일을 다운로드하려면 HTML 연결 태그 를 사용하고 href 속성의 URL 값을 다운로드된 파일로 지정하기만 하면 됩니다. 표시:

파일 다운로드

위 코드를 통해 파일 다운로드를 구현하면 브라우저가 기본적으로 인식할 수 없는 일부 MIME 형식의 파일만 처리할 수 있습니다. 예를 들어 book.rar 파일에 접근하면 브라우저가 직접 열지 않고 팝업이 뜹니다. 다운로드 프롬프트 상자를 표시합니다. 사용자에게 "다운로드" 또는 "열기" 및 기타 처리 방법을 묻는 메시지를 표시합니다. 그러나 이 연결 양식을 사용하면 접미사가 .html인 웹 페이지 파일, 이미지 파일, PHP 프로그램 스크립트 파일 등을 다운로드해야 하는 경우 파일 내용이 브라우저에 직접 출력되며 사용자에게 메시지가 표시되지 않습니다. 다운로드.

파일의 보안을 강화하기 위해 태그에 파일에 대한 링크를 제공하지 않으려면 필요한 헤더 정보를 브라우저에 전송하여 파일이 다운로드 예정입니다. PHP는 웹페이지의 헤더 정보를 브라우저에 전달하기 위해 header() 함수를 사용합니다. 이 함수는 헤더 정보 문자열을 매개변수로 받습니다. 파일 다운로드를 위해 보내야 하는 헤더 정보는 다음 세 부분으로 구성되며, header() 함수를 3번 호출하면 완성됩니다. test.gif 사진을 다운로드하는 경우 전송해야 하는 헤더 정보는 다음과 같습니다.

header(‘Content-Type:imge/gif'); //发送指定文件MIME类型的头信息
header(‘Content-Disposition:attachment; filename=”test.gif”‘); //发送描述文件的头信息,附件和文件名
header(‘Content-Length:3390′); //发送指定文件大小的信息,单位字节

로그인 후 복사

header() 함수를 사용하여 이 세 줄의 헤더 정보를 브라우저에 보내면 test.gif 이미지가 브라우저에 직접 표시되지 않지만 브라우저는 해당 파일을 다운로드 형식으로 포맷합니다. header() 함수에서 "Content-Type"은 파일의 MIME 유형을 지정하고, "Content_Disposition"은 파일을 설명하는 데 사용되며, "attachment; filename="test.gif"" 값은 이것이 첨부 파일임을 나타냅니다. 그리고 다운로드를 지정합니다. 파일 이름 뒤에 "Content_Length"는 다운로드된 파일의 크기를 제공합니다.

헤더 정보를 설정한 후 다운로드를 위해서는 파일 내용을 브라우저에 출력해야 합니다. PHP의 파일 시스템 기능을 사용하여 파일 내용을 읽고 브라우저에 직접 출력할 수 있습니다. 가장 편리한 방법은 readfile() 함수를 사용하여 파일 내용을 읽고 직접 출력하는 것입니다. 다음과 같이 test.gif 파일을 다운로드합니다.

 <&#63;php
$filename = "test.gif";
header('Content-Type:image/gif'); //指定下载文件类型
header('Content-Disposition: attachment; filename="'.$filename.'"'); //指定下载文件的描述
header('Content-Length:'.filesize($filename)); //指定下载文件的大小
 
//将文件内容读取出来并直接输出,以便下载
readfile($filename);
&#63;> 

로그인 후 복사

위에서 중국어 이름이 나오면 정상적으로 다운로드가 되지 않습니다. 중국어 이름이 있는 파일을 다운로드하기 위한 다른 파일 다운로드 예제 코드를 찾았습니다

<&#63;php 
header("Content-type:text/html;charset=utf-8"); 
// $file_name="cookie.jpg"; 
$file_name="圣诞狂欢.jpg"; 
//用以解决中文不能显示出来的问题 
$file_name=iconv("utf-8","gb2312",$file_name); 
$file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy/down/down/"; 
$file_path=$file_sub_path.$file_name; 
//首先要判断给定的文件存在与否 
if(!file_exists($file_path)){ 
echo "没有该文件文件"; 
return ; 
} 
$fp=fopen($file_path,"r"); 
$file_size=filesize($file_path); 
//下载文件需要用到的头 
Header("Content-type: application/octet-stream"); 
Header("Accept-Ranges: bytes"); 
Header("Accept-Length:".$file_size); 
Header("Content-Disposition: attachment; filename=".$file_name); 
$buffer=1024; 
$file_count=0; 
//向浏览器返回数据 
while(!feof($fp) && $file_count<$file_size){ 
$file_con=fread($fp,$buffer); 
$file_count+=$buffer; 
echo $file_con; 
} 
fclose($fp); 
&#63;>
로그인 후 복사

헤더("Content-type:text/html;charset=utf-8")의 역할: 서버가 브라우저의 요청에 응답하면 브라우저에 콘텐츠를 UTF-8 인코딩으로 표시하라고 지시합니다

file_exists() 함수가 중국어 경로를 지원하지 않는 문제에 대해: php 함수가 비교적 초기이고 중국어를 지원하지 않기 때문에 다운로드한 파일명이 중국어인 경우 문자 인코딩을 변환해야 하고, 그렇지 않으면 file_exists() 함수는 식별을 위해 인코딩 변환을 위해 iconv() 함수를 사용할 수 있습니다

$file_sub_path() 상대 경로보다 효율적인 절대 경로를 사용합니다

Header("Content-type: application/octet-stream")的作用:通过这句代码客户端浏览器就能知道服务端返回的文件形式 
Header("Accept-Ranges: bytes")的作用:告诉客户端浏览器返回的文件大小是按照字节进行计算的 
Header("Accept-Length:".$file_size)的作用:告诉浏览器返回的文件大小 
Header("Content-Disposition: attachment; filename=".$file_name)的作用:告诉浏览器返回的文件的名称 

로그인 후 복사

위 4개의 Header()가 필수입니다
fclose($fp)는 버퍼에 마지막 남은 데이터를 디스크 파일로 출력하고 파일 포인터 및 관련 버퍼를 해제할 수 있습니다

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿