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

PHP では再開可能なファイルのダウンロードをどのように実装できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-07 11:10:17932ブラウズ

How Can PHP Implement Resumable File Downloads?

PHP ベースのファイル トンネリングによるダウンロードの再開

PHP がファイル ダウンロードのプロキシとして使用されるこのシナリオでは、ユーザーは課題に直面します。中断されたダウンロードを再開するとき。この記事は、この問題に対処し、考えられる解決策を検討することを目的としています。

PHP での再開可能なダウンロードの実装

再開可能なダウンロードを有効にするには、最初に部分コンテンツに対するサーバーのサポートを伝える必要があります。 「Accept-Ranges: bytes」ヘッダー経由。その後、リクエストに「Range: bytes=x-y」ヘッダー (x と y は数値を表します) が含まれている場合は、リクエストされた範囲を抽出し、それに応じてファイル転送を操作する必要があります。

次の 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);

追加注

  • このコードは、単一の範囲のみが要求されることを前提としています。
  • 簡潔にするためにエラー処理は省略されています。
  • 詳細については、提供されているドキュメントを参照してください。部分的なコンテンツと fread 関数の詳細については、

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

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