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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-07 15:45:18725ブラウズ

How Can I Enable Resumable Downloads in My PHP File Transfer Script?

PHP ファイル転送スクリプトで再開可能なダウンロードを有効にする

はじめに

セキュリティ目的で PHP スクリプトを使用してファイルを転送する場合、ダウンロード可能なファイルの絶対パス隠す必要があることが多い。ただし、従来の PHP ファイル転送スクリプトは再開可能なダウンロードをサポートしていない可能性があり、接続が中断されるエンド ユーザーに不便をもたらします。

解決策: 再開可能なダウンロードのサポート

再開可能なダウンロードを有効にするには、次の手順を実行します。取得:

  1. Accept-Range を送信: バイトheader: このヘッダーは、部分コンテンツがサポートされていることをクライアントに通知します。
  2. 部分コンテンツ リクエストの処理: Range: bytes=x-y ヘッダーを持つリクエストを受信すると、範囲を解析します。ファイル内の目的のオフセットをシークし、要求されたバイト範囲を送信します。
  3. 部分的なコンテンツの HTTP ステータスを設定しますコード: HTTP/1.0 206 部分コンテンツで応答し、部分転送が成功したことを示します。

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 ($offset > 0) {
    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);

このスクリプトは、最初に部分的なコンテンツ要求が行われたかどうかを確認します。存在する場合、Range ヘッダーから範囲を解析し、ファイル内の適切なオフセットを探し、要求されたバイト範囲を送信します。また、スクリプトは Accept-Ranges ヘッダーをバイトに設定し、必要に応じて部分コンテンツに適切な HTTP ステータス コードを送信します。

これらの対策を実装することで、PHP ファイル転送スクリプトを使用して再開可能なダウンロードをサポートでき、堅牢なソリューションが提供されます。中断後に再開できるファイル転送の場合。

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

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