ホームページ  >  記事  >  バックエンド開発  >  PHP ダウンロード ファイルは任意のファイル形式を強制的にダウンロードします

PHP ダウンロード ファイルは任意のファイル形式を強制的にダウンロードします

WBOY
WBOYオリジナル
2016-07-25 09:12:36974ブラウズ

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 download');
  7. function download($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: bytes");
  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. /********************
  2. *@file - ファイルへのパス
  3. */
  4. function Force_download($file)
  5. {
  6. if ((isset($file))&&(file_exists($file))) {
  7. header("Content-length: " .filesize($file));
  8. header('Content-Type: application/octet-stream');
  9. header('Content-Disposition:attachment; filename="' . $file . '"');
  10. readfile( "$file");
  11. } else {
  12. echo "ファイルが選択されていません";
  13. }
  14. }
コードをコピー

「ファイルをダウンロードする」ということがそんなに簡単だと言う価値があるでしょうか?もちろん、それは想像されているほど単純ではありません。たとえば、顧客が特定のファイルをダウンロードする前にフォームに記入してもらいたい場合、最初に「リダイレクト」メソッドを使用する必要があります。まずフォームが記入され完了したかどうかを確認し、次に URL を指定する必要があります。をファイルに追加して、顧客がダウンロードできるようにします。ただし、「オンライン ショッピング」に関する電子商取引 Web サイトを作成し、セキュリティの問題を考慮する場合は、ユーザーが URL を直接コピーしてファイルをダウンロードすることは望ましくありません。著者は、PHP を使用して実際のファイルを直接読み取り、それをダウンロードする方法をお勧めします。手順は以下の通りです

  1. $file_name = "info_check.exe";
  2. $file_dir = "/public/www/download/";
  3. if (!file_exists($file_dir . $file_name)) { //ファイルが存在するかどうかを確認する
  4. echo " ファイルが見つかりません";
  5. 終了;
  6. } else {
  7. $file = fopen($file_dir . $file_name,"r"); // ファイルを開きます
  8. // ファイルタグを入力します www.jbxue.com
  9. Header( "Content -type: application/octet-stream");
  10. Header("Accept-Ranges: bytes");
  11. Header("Accept-Length: ".filesize($file_dir . $file_name));
  12. Header("Content -Disposition :attachment; filename=" . $file_name);
  13. // 出力ファイルの内容
  14. echo fread($file,filesize($file_dir . $file_name));
  15. fclose($file);
  16. exit;
  17. }
コードをコピー

ファイルパスが「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("Content-type: application/octet-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. public function 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("Content-type: application/octet-stream");
  38. header( "Accept-Range: バイト");
  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. 無題ドキュメント) それ以外の場合、この情報はダウンロード ファイルにダウンロードされ、ファイルが使用できなくなります。
コードをコピー



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。