>백엔드 개발 >PHP 튜토리얼 >PHP 다운로드 파일은 모든 파일 형식을 강제로 다운로드합니다.

PHP 다운로드 파일은 모든 파일 형식을 강제로 다운로드합니다.

WBOY
WBOY원래의
2016-07-25 09:12:361003검색

PHP를 사용하여 일부 파일을 다운로드하는 것은 일반적으로 파일의 실제 다운로드 주소를 숨기는 데 필요합니다. 그렇지 않으면 소프트웨어 주소를 직접 제공하는 것이 좋습니다.

간단한 PHP 파일은 소스 코드를 다운로드합니다. 중단점 재개 등을 지원하지 않지만 몇 가지 일반적인 요구 사항을 충족할 수 있습니다. PHP 다운로드 파일은 실제로 magento-1.8.1.0.zip과 같은 태그를 사용하여 얻을 수 있습니다. 그러나 .txt, .html, .pdf 등과 같이 브라우저가 인식할 수 있는 일부 형식이 있는 경우 abc.txt를 사용하면 어떤 일이 발생하는지 알아야 합니다.

  1. /**
  2. * 파일 다운로드
  3. *
  4. **/
  5. header("Content-type:text/html;charset=utf-8");
  6. download('web/magento-1.8.1.0.zip', 'magento 다운로드');
  7. 함수 다운로드($file, $down_name){
  8. $suffix = substr($file,strrpos($file) ,'.')); //파일 접미사 가져오기
  9. $down_name = $down_name.$suffix; //새 파일 이름은 다운로드 후의 이름입니다
  10. //해당 파일이 존재하는지 확인
  11. if(!file_exists($file)){
  12. die("다운로드하려는 파일이 더 이상 존재하지 않습니다. 삭제되었을 수 있습니다.");
  13. }
  14. $fp = fopen($file," r ");
  15. $file_size = filesize($file);
  16. //파일을 다운로드하는 데 필요한 헤더
  17. header("Content-type: application/octet-stream");
  18. header( " Accept-Ranges: 바이트");
  19. header("Accept-Length:".$file_size);
  20. header("Content-Disposition: attachment; filename=".$down_name);
  21. $buffer = 1024;
  22. $file_count = 0;
  23. //브라우저로 데이터 반환
  24. while(!feof($fp) && $file_count < $file_size){
  25. $file_con = fread($ fp ,$buffer);
  26. $file_count = $buffer;
  27. echo $file_con;
  28. } www.jbxue.com
  29. fclose($fp);
  30. }
  31. ?> 🎜>
코드 복사
PHP 필수 파일 다운로드 소스코드

사용자에게 필수 파일 다운로드 기능을 제공합니다.

    /********************
  1. *@file - 파일 경로
  2. */
  3. function force_download($file)
  4. {
  5. if ((isset($file)))&&(file_exists( $ 파일))) {
  6. header("콘텐츠 길이: ".filesize($file));
  7. header('콘텐츠 유형: 애플리케이션/옥텟-스트림');
  8. header('콘텐츠 - 처리: filename="' . $file . '"');
  9. readfile("$file");
  10. } else {
  11. echo "선택한 파일 없음";
  12. }
  13. }
코드 복사
"파일 다운로드"가 그렇게 간단하다고 말할 가치가 있습니까? 물론 생각만큼 간단하지는 않습니다. 예를 들어, 고객이 특정 파일을 다운로드하기 전에 양식을 작성하도록 하려면 먼저 양식이 작성되고 완료되었는지 확인한 다음 URL을 가리키는 "리디렉션" 방법을 사용해야 합니다. 을 사용하여 고객이 다운로드할 수 있도록 하되, "온라인 쇼핑"에 관한 전자상거래 웹사이트를 만들고 보안 문제를 고려한다면 사용자가 파일을 다운로드하기 위해 URL을 직접 복사하는 것을 원하지 않을 것입니다. 저자는 PHP를 사용하여 실제 파일을 직접 읽은 다음 다운로드하는 방법을 권장합니다. 절차는 다음과 같습니다.

    $file_name = "info_check.exe";
  1. $file_dir = "/public/www/download/";
  2. if (!file_exists($file_dir . $file_name) )) { //파일이 있는지 확인
  3. echo "파일을 찾을 수 없음";
  4. exit;
  5. } else {
  6. $file = fopen($file_dir . $file_name,"r"); // 파일 열기
  7. // 파일 태그 입력 www.jbxue.com
  8. Header("Content-type: application/octet-stream");
  9. Header("Accept-Ranges: bytes") ;
  10. Header("Accept-Length: ".filesize($file_dir . $file_name));
  11. Header("Content-Disposition: attachment; filename=" . $file_name);
  12. //출력 파일 content
  13. echo fread($file,filesize($file_dir . $file_name));
  14. fclose($file);
  15. exit;
  16. }
코드 복사
파일 경로가 "http" 또는 "ftp" URL인 경우 소스 코드가 약간 변경됩니다.

    $file_name = "info_check.exe";
  1. $file_dir = "http://www.jbxue.com/";
  2. $file = @fopen($ file_dir . $file_name,"r");
  3. if (!$file) {
  4. echo "파일을 찾을 수 없음";
  5. } else {
  6. Header("콘텐츠 유형: 애플리케이션/옥텟 - stream");
  7. Header("Content-Disposition: attachment; filename=" . $file_name);
  8. while (!feof ($file)) {
  9. echo fread($file,50000);
  10. }
  11. fclose ($file);
  12. }
코드 복사

이렇게 하면 PHP를 사용하여 파일을 직접 출력할 수 있습니다.

단, 주의할 점: 헤더 정보는 먼저 파일 정보를 빠른 속도로 탐색한 다음 브라우저의 정보를 첨부 파일로 다운로드하는 것과 같습니다. 따라서 MVC 모드 애플리케이션을 사용하는 경우 보기 페이지에는 콘텐츠가 없어야 합니다. 그렇지 않으면 보기 페이지의 관련 콘텐츠가 파일 콘텐츠와 함께 다운로드되므로 다운로드한 파일을 사용할 수 없게 됩니다.
내 프로그램은 다음과 같습니다.

  1. 공개 함수 downloadAction()
  2. {
  3. if (isset($_GET['mriID']))
  4. {
  5. $this->view ->mriID=(get_magic_quotes_gpc())?$_GET['mriID']:addslashes($_GET['mriID']);
  6. }
  7. if (isset($_GET['dicomID']))
  8. {
  9. $this->view->dicomID=(get_magic_quotes_gpc())?$_GET['dicomID']:addslashes($_GET['dicomID']);
  10. }
  11. if (isset($_GET['JPGID']))
  12. {
  13. $this->view->JPGID=(get_magic_quotes_gpc())?$_GET['JPGID']:addslashes($_GET[ 'JPGID']);
  14. } www.jbxue.com
  15. $dicomfile=new dicomfile();
  16. $jpgfile=new jpgfile();
  17. $mri=new mri();
  18. if($this->view->dicomID)
  19. {
  20. $filename=$dicomfile->find($this->view->dicomID)->toArray();
  21. $filename=$filename[0]['filename'];
  22. }
  23. else if($this->view->JPGID)
  24. {
  25. $filename=$jpgfile- >find($this->view->JPGID)->toArray();
  26. $filename=$filename[0]['JPGname'];
  27. }
  28. $dir=$ mri->find($this->view->mriID)->toArray();
  29. $dir=$dir[0]['dicom_path'];
  30. $file=$dir. '/'.$filename;
  31. if (!file_exists($file))
  32. {
  33. echo "파일이 존재하지 않습니다!";
  34. exit();
  35. }
  36. $file_size=filesize($file);
  37. header("콘텐츠 유형: 애플리케이션/옥텟-스트림");
  38. header("Accept-Ranges: 바이트");
  39. header("Accept-Length :".$file_size);
  40. header("Content-Disposition: attachment; filename=".$filename);
  41. $fp=fopen($file,"r");
  42. if (!$ fp)
  43. echo "파일을 열 수 없습니다!";
  44. $buffer_size=1024;
  45. $cur_pos=0;
  46. while (!feof($fp)&&$file_size-$cur_pos>$ buffer_size)
  47. {
  48. $buffer=fread($fp,$buffer_size);
  49. echo $buffer;
  50. $cur_pos =$buffer_size;
  51. }
  52. $buffer=fread($ fp,$file_size-$cur_pos);
  53. echo $buffer;
  54. fclose($fp)
  55. }
코드 복사

이 시점에서 download.phtml 페이지는 완전히 비어 있어야 합니다. 어떤 콘텐츠도 포함하지 마세요(다음과 같은 미리 준비된 메시지 포함:

  1. Untitled Document) 그렇지 않으면 이 정보가 다운로드 파일로 다운로드되어 파일을 사용할 수 없게 됩니다.
코드 복사



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:HHVM 소개(번역)다음 기사:HHVM 소개(번역)