「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP ファイル転送スクリプトで再開可能なダウンロードを有効にするにはどうすればよいですか?

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

2025 年 1 月 19 日に公開
ブラウズ:506

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

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

はじめに

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

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

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

  1. Accept-Ranges: bytes ヘッダーを送信します: このヘッダーは次のことを示します部分コンテンツがサポートされているクライアント。
  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 ファイル転送スクリプトを使用して再開可能なダウンロードをサポートでき、堅牢なソリューションが提供されます。中断後に再開できるファイル転送の場合。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3