現在の位置: ホーム> 最新記事一覧> Stream_context_set_paramsを使用して、ファイルブレークポイントの連続伝送を実現できますか?それを構成する方法は?

Stream_context_set_paramsを使用して、ファイルブレークポイントの連続伝送を実現できますか?それを構成する方法は?

M66 2025-06-26

PHPでは、ファイルのダウンロードを処理する際には、ブレークポイントの継続が一般的な要件です。これにより、ユーザーは、ダウンロードプロセスが切断された後、中断された場所からダウンロードを続けることができ、ファイル全体の再ダウンロードを回避できます。通常、ブレークポイントの連続伝送を実装するための鍵は、HTTPヘッダーの処理と、範囲要求に対するサーバーのサポートにあります。

それで、 stream_context_set_paramsを使用してファイルブレークポイント連続伝送を実装できますか?それを構成する方法は?

stream_context_set_paramsとは何ですか?

stream_context_set_paramsは、既存のストリームコンテキストのパラメーターを設定するためにPHPで使用される関数です。多くの場合、タイムアウト、通知コールバックなどのストリームの動作を調整するために使用されます。その使用フォームは次のとおりです。

 stream_context_set_params(resource $stream_context, array $params): bool

パラメーターを含めることができます:

  • 通知:コールバック関数を設定します

  • タイムアウト:タイムアウト時間(秒)を設定します

  • ブロッキング:フローをブロックするかどうか

ブレークポイントの連続伝送のコアメカニズム

ブレークポイントの連続伝送の実装は、主にHTTPプロトコルの範囲ヘッダーに依存しており、サーバーはリクエストヘッダーに基づいて対応するバイト範囲のデータを返します。例えば:

 Range: bytes=1000-

クライアントがBYTE 1000からダウンロードを開始したいことを示します。

そのようなリクエストを受信した後、サーバーはステータスコード206部分コンテンツを返し、応答ヘッダーにコンテンツレンジをもたらし、クライアントに返されたファイルの部分をクライアントに伝えます。

stream_context_set_paramsはブレークポイントの連続伝送を実現できますか?

厳密に言えば、 stream_context_set_params自体は、HTTPヘッダーを処理するように設計されていません。ストリームパラメーターを設定するために使用されます。 HTTPリクエストヘッダーの範囲を構成するために直接使用することも、サーバー側の応答ステータスコードとセグメント化された送信を処理することもできません。

BreakPointの連続伝送をサポートするPHPでHTTPリクエストを開始する場合は、httpオプションを使用してstream_context_createを使用して、次のような要求ヘッダーを設定する必要があります。

 $options = [
    'http' => [
        'method' => 'GET',
        'header' => "Range: bytes=1000-\r\n",
    ]
];
$context = stream_context_create($options);
$file = file_get_contents('http://m66.net/path/to/file', false, $context);

このようにして、クライアントは、指定されたバイトからファイルをダウンロードするように要求できます。

構成例:PHPを使用してクライアントブレークポイントの更新リクエストを実装する

<?php
$start = 1000; // から1000バイトはダウンロードを開始します

$options = [
    'http' => [
        'method' => 'GET',
        'header' => "Range: bytes=$start-\r\n",
        'ignore_errors' => true, // 受信を許可します 206 応答
    ]
];

$context = stream_context_create($options);

$url = 'http://m66.net/path/to/largefile.zip';

$fileContent = file_get_contents($url, false, $context);

// できる $fileContent 既存のファイルに追加されます,連続伝送を実装し、マージします
file_put_contents('localfile.zip', $fileContent, FILE_APPEND);

?>

上記の例では、焦点は、 HTTPオプションのヘッダー範囲を追加して、サーバーのコンテンツの一部を返すようにすることです。 stream_context_set_paramsは、リクエストヘッダーの設定に責任がないため、使用されません。

サーバー側のブレークポイント連続伝送サポート

クライアントは、範囲ヘッダーでリクエストを開始し、ブレークポイントを継続するための最初のステップのみを開始し、サーバーは範囲のリクエストを正しくサポートし、応答する必要があります。

  • サーバーはステータスコード206部分コンテンツを返す必要があります

  • サーバーは、コンテンツレンジヘッダーを正しく設定する必要があります

  • サーバーは、ファイルのブレークポイント読み取りをサポートしています

サーバーがサポートしていない場合、クライアントは範囲ヘッダーを要求し、ファイル全体を返します。

要約します

  • stream_context_set_paramsは、主にhttp要求ヘッダーを設定するのではなく、ストリームパラメーターを設定するために使用され、ブレークポイントの連続伝送を直接実装することはできません。

  • BreakPointの連続伝送を実装するには、 Stream_Context_Createを使用し、 HTTPオプションで範囲要求ヘッダーを設定する必要があります。

  • サーバーは、ブレークポイントの範囲要求を正しくサポートする必要があります。

  • PHPファイルの操作関数と組み合わせて、クライアントブレークポイントの連続ファイルのダウンロード機能を実現できます。