ホームページ > バックエンド開発 > PHPチュートリアル > PHP ファイル トンネリングで再開可能なダウンロードを実装するにはどうすればよいですか?

PHP ファイル トンネリングで再開可能なダウンロードを実装するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-08 19:52:11
オリジナル
805 人が閲覧しました

How Can I Implement Resumable Downloads in PHP File Tunneling?

PHP ファイル トンネリングによる再開可能なダウンロード

PHP を使用してファイルのダウンロードをストリーミングする場合、ユーザーに対して再開可能なダウンロードを有効にすることが望ましい場合があります。ただし、デフォルトの PHP スクリプト設定により、ダウンロードの再開が妨げられることがよくあります。

PHP で再開可能なダウンロードをサポートするには、次の手順に従います:

  1. Send Accept-Ranges Header:
    サーバーが再開をサポートしていることを示すために、すべての応答で Accept-Ranges: bytes ヘッダーを送信します。 downloads.
  2. 範囲リクエストの処理:
    受信リクエストの Range: bytes=x-y ヘッダーを検査します。ここで、x はオフセット、y はリクエストされた範囲の終了バイトです。
  3. ファイルをシークして範囲を送信:
    ファイルを開いてシークします指定されたオフセット。次に、fread() を使用して、要求されたバイト範囲を送信します。
  4. 部分コンテンツ ヘッダーの設定:
    範囲リクエストの場合、HTTP/1.0 206 部分コンテンツ ヘッダーを設定し、コンテンツ範囲を指定します。 Content-Range を使用: bytes x-y/filesize.

これらの手順を実装すると、 PHP ファイルトンネリング設定で再開可能なダウンロードを有効にします。このプロセスを示す PHP コードの例を次に示します:

$filesize = filesize($file);

$offset = 0;
$length = $filesize;

if (isset($_SERVER['HTTP_RANGE'])) {
    preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

    $offset = intval($matches[1]);
    $length = intval($matches[2]) - $offset;
}

$file = fopen($file, 'r');
fseek($file, $offset);
$data = fread($file, $length);
fclose($file);

if ($partialContent) {
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
}

header('Content-Type: ' . $ctype);
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Accept-Ranges: bytes');

print($data);
ログイン後にコピー

以上がPHP ファイル トンネリングで再開可能なダウンロードを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート