大きなファイルをダウンロードし、ブレークポイントのダウンロードを再開するための PHP 実装コード
リリース: 2016-07-25 08:59:14
-
- $sourceFile = "jbxue.tmp"; //ダウンロードする一時ファイルの名前
- $outFile = "User Order.xls" //ダウンロードするファイルの名前ダウンロードしてクライアントに保存します
- $file_extension = strto lower(substr(strrchr($sourceFile, "."), 1)); //ファイル拡張子を取得します
- //echo $sourceFile;
- if (!ereg("[tmp |txt|rar|pdf|doc] ", $file_extension))exit ("違法なリソースのダウンロード");
- //ファイルが存在するかどうかを確認します
- if (!is_file($sourceFile)) {
- die("}
- $len = filesize($sourceFile); //ファイルサイズを取得します
- $filename =basename($sourceFile); //ファイル名を取得します
- $ outFile_extension = strto lower(substr(strrchr($outFile, " ."), 1)); //ファイル拡張子を取得
- //拡張子に応じて出力ブラウザ形式を指定
- switch ($outFile_extension) {
- case "exe" :
- $ctype = "アプリケーション/オクテットストリーム";
- break;
- case "zip" :
- $ctype = "アプリケーション/zip";
- break;
- case "mp3" :
- $ctype = "オーディオ/mpeg" ;
- break;
- case "mpg" :
- $ctype = "video/mpeg";
- break;
- case "avi" :
- $ctype = "video/x-msvideo";
- break;
- default :
- $ctype = "application/force-download";
- }
- / /ヘッダーの書き込みを開始します
- header("Cache-Control:");
- header("Cache-Control: public");
- //出力ブラウザの形式を設定します
- header ("Content-Type: $ctype");
- header ("Content-Disposition:attachment; filename=" . $outFile);
- header("Accept-Range: bytes");
- $size = filesize($sourceFile) ;
- //$_SERVER['HTTP_RANGE'] がある場合 パラメータ
- if (isset ($_SERVER['HTTP_RANGE'])) {
- /*Range ヘッダー フィールド Range ヘッダー フィールドは、実在物。
- たとえば、
- は最初の 500 バイトを表します: bytes=0-499
- 2 番目の 500 バイトを表します: bytes=500-999
- 最後の 500 バイトを表します: bytes=-500
- 500 バイト以降の範囲を表します :bytes=500 -
- 最初と最後のバイト: bytes=0-0,-1
- 同時に複数の範囲を指定: bytes=500-600,601-999
- ただし、無条件 GET に Range リクエスト ヘッダーが含まれる場合、サーバーはこのリクエスト ヘッダーを無視できます。応答はステータス コード 200 (OK) ではなく 206 (PartialContent) で返されます。
- */
- // ブレークポイントの後に再度接続します。 $_SERVER['HTTP_RANGE'] の値は bytes=4390912-
- list ($a, $range) =explode("=, $_SERVER['HTTP_RANGE']) です。 );
- //はいの場合、不足している部分をダウンロードします
- str_replace($range, "-", $range); //この文は何ですか? 。 。 。
- $size2 = $size -1; //ファイル内の合計バイト数
- $new_length = $size2 - $range; //次のダウンロードの長さを取得する
- header("HTTP/1.1 206 Partial Content") ;
- header( "Content-Length: $new_length"); // 合計の長さを入力します
- header("Content-Range: bytes $range$size2/$size"); //Content-Range: bytes 4908618-4988927/ 4988928 95% の確率で
- } else {
- //最初の接続
- $size2 = $size -1;
- header("Content-Range: bytes 0-$size2/$size"); //Content-Range: bytes 0-4988927/4988928
- header("Content-Length: " . $size); //出力の合計長
- }
- //ファイルを開く
- //bbs.it-home.org
- $fp = fopen(" $sourceFile", "rb" );
- //ポインターの位置を設定します
- fseek($fp, $range);
- //アンリアル出力
- while (!feof($fp)) {
- //最大ファイル実行を設定しますtime
- set_time_limit(0);
- print (fread($fp, 1024 * 8)); //出力ファイル
- flush(); //出力バッファ
- ob_flush();
- }
- fclose($fp);
- exit ();
- ?>
コードをコピー
|
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31