ホームページ  >  記事  >  バックエンド開発  >  大きなファイルをダウンロードし、ブレークポイントのダウンロードを再開するための PHP 実装コード

大きなファイルをダウンロードし、ブレークポイントのダウンロードを再開するための PHP 実装コード

WBOY
WBOYオリジナル
2016-07-25 08:59:14909ブラウズ
  1. $sourceFile = "jbxue.tmp"; //ダウンロードする一時ファイルの名前
  2. $outFile = "User Order.xls" //ダウンロードするファイルの名前ダウンロードしてクライアントに保存します
  3. $file_extension = strto lower(substr(strrchr($sourceFile, "."), 1)); //ファイル拡張子を取得します
  4. //echo $sourceFile;
  5. if (!ereg("[tmp |txt|rar|pdf|doc] ", $file_extension))exit ("違法なリソースのダウンロード");
  6. //ファイルが存在するかどうかを確認します
  7. if (!is_file($sourceFile)) {
  8. die("}
  9. $len = filesize($sourceFile); //ファイルサイズを取得します
  10. $filename =basename($sourceFile); //ファイル名を取得します
  11. $ outFile_extension = strto lower(substr(strrchr($outFile, " ."), 1)); //ファイル拡張子を取得
  12. //拡張子に応じて出力ブラウザ形式を指定
  13. switch ($outFile_extension) {
  14. case "exe" :
  15. $ctype = "アプリケーション/オクテットストリーム";
  16. break;
  17. case "zip" :
  18. $ctype = "アプリケーション/zip";
  19. break;
  20. case "mp3" :
  21. $ctype = "オーディオ/mpeg" ;
  22. break;
  23. case "mpg" :
  24. $ctype = "video/mpeg";
  25. break;
  26. case "avi" :
  27. $ctype = "video/x-msvideo";
  28. break;
  29. default :
  30. $ctype = "application/force-download";
  31. }
  32. / /ヘッダーの書き込みを開始します
  33. header("Cache-Control:");
  34. header("Cache-Control: public");
  35. //出力ブラウザの形式を設定します
  36. header ("Content-Type: $ctype");
  37. header ("Content-Disposition:attachment; filename=" . $outFile);
  38. header("Accept-Range: bytes");
  39. $size = filesize($sourceFile) ;
  40. //$_SERVER['HTTP_RANGE'] がある場合 パラメータ
  41. if (isset ($_SERVER['HTTP_RANGE'])) {
  42. /*Range ヘッダー フィールド Range ヘッダー フィールドは、実在物。
  43. たとえば、
  44. は最初の 500 バイトを表します: bytes=0-499
  45. 2 番目の 500 バイトを表します: bytes=500-999
  46. 最後の 500 バイトを表します: bytes=-500
  47. 500 バイト以降の範囲を表します :bytes=500 -
  48. 最初と最後のバイト: bytes=0-0,-1
  49. 同時に複数の範囲を指定: bytes=500-600,601-999
  50. ただし、無条件 GET に Range リクエスト ヘッダーが含まれる場合、サーバーはこのリクエスト ヘッダーを無視できます。応答はステータス コード 200 (OK) ではなく 206 (PartialContent) で返されます。
  51. */
  52. // ブレークポイントの後に再度接続します。 $_SERVER['HTTP_RANGE'] の値は bytes=4390912-
  53. list ($a, $range) =explode("=, $_SERVER['HTTP_RANGE']) です。 );
  54. //はいの場合、不足している部分をダウンロードします
  55. str_replace($range, "-", $range); //この文は何ですか? 。 。 。
  56. $size2 = $size -1; //ファイル内の合計バイト数
  57. $new_length = $size2 - $range; //次のダウンロードの長さを取得する
  58. header("HTTP/1.1 206 Partial Content") ;
  59. header( "Content-Length: $new_length"); // 合計の長さを入力します
  60. header("Content-Range: bytes $range$size2/$size"); //Content-Range: bytes 4908618-4988927/ 4988928 95% の確率で
  61. } else {
  62. //最初の接続
  63. $size2 = $size -1;
  64. header("Content-Range: bytes 0-$size2/$size"); //Content-Range: bytes 0-4988927/4988928
  65. header("Content-Length: " . $size); //出力の合計長
  66. }
  67. //ファイルを開く
  68. //bbs.it-home.org
  69. $fp = fopen(" $sourceFile", "rb" );
  70. //ポインターの位置を設定します
  71. fseek($fp, $range);
  72. //アンリアル出力
  73. while (!feof($fp)) {
  74. //最大ファイル実行を設定しますtime
  75. set_time_limit(0);
  76. print (fread($fp, 1024 * 8)); //出力ファイル
  77. flush(); //出力バッファ
  78. ob_flush();
  79. }
  80. fclose($fp);
  81. exit ();
  82. ?>
コードをコピー


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