ホームページ >バックエンド開発 >PHPチュートリアル >PHP スクリプトで再開可能なダウンロードを有効にするにはどうすればよいですか?

PHP スクリプトで再開可能なダウンロードを有効にするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-18 10:33:14865ブラウズ

How Can I Enable Resumable Downloads with a PHP Script?

PHP スクリプトによる再開可能なダウンロードのサポート

質問:
PHP スクリプトを使用してダウンロード可能なファイルを送信する場合、エンド ユーザーはダウンロードを再開できません。このようなソリューションでは、再開可能なダウンロードをどのようにサポートできますか?

回答:

再開可能なダウンロードを有効にするには、次の手順に従います:

  1. Accept-Range: バイトを送信しますheader:

    • このヘッダーは、部分コンテンツをサポートしていることをクライアントに通知します。
  2. ハンドル範囲ヘッダー:

    • リクエストに範囲が含まれる場合: bytes=x-yヘッダーを解析して、要求された範囲を決定します。
    • ファイルを開き、要求されたオフセットまでシークし、要求されたデータ長を読み取ります。
  3. 部分的なコンテンツヘッダーを設定します:

    • リクエストが次の場合部分的なコンテンツ (Range ヘッダーが存在する) の場合は、次のヘッダーを設定します:

      • HTTP/1.1 206 Partial Content
      • Content-Range: バイトx-y/filesize
  4. ファイル データを送信します:

    • print を使用して要求されたデータを出力します() または

部分的なコンテンツのダウンロードを実装する方法を示すサンプル 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 ($offset > 0) {
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
}

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

print($data);

このコードは、適切なヘッダーを設定し、要求されたファイル データ。再開可能なダウンロードをサポートします。

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

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