現在の位置: ホーム> 最新記事一覧> curl_pause関数を使用してファイルのアップロードまたはダウンロード操作を一時停止して、安全なトランスミッションを確保する方法

curl_pause関数を使用してファイルのアップロードまたはダウンロード操作を一時停止して、安全なトランスミッションを確保する方法

M66 2025-06-28

ネットワークデータ転送にPHPを使用する場合、 Curlは非常に一般的で強力なツールです。リモートサーバーにファイルをアップロードする場合でも、リモートサーバーからファイルをダウンロードする場合でも、 Curlは柔軟な制御方法を提供できます。ネットワークの一時的な中断、特定の検証メカニズムが完了するのを待つ、特定のセキュリティイベントへの応答などのアプリケーションシナリオでは、ファイルのアップロードまたはダウンロードの操作を一時停止したいと考えています。 PHPのcurl_pause()関数は、そのような機能を提供します。

curl_pause()の役割

curl_pause()関数は、Curlセッション中に一時的に一時停止または再開またはダウンロードされたデータストリームを再開するために使用されます。これは、データ送信プロセスの制御、リソースの節約、非同期イベントへの対応などのシナリオに非常に役立ちます。

関数定義は次のとおりです。

 curl_pause(CurlHandle $handle, int $bitmask): int

$ハンドルはカールセッションリソースであり、 $ BitMaskは一時停止/回復のためのコントロールフラグです。

一般的に使用される$ビットマスク定数は次のとおりです。

  • curlpause_recv :データを受け取る(ダウンロード)データを一時停止します

  • curlpause_send :送信(アップロード)データを一時停止します

  • curlpause_all :アップロードしてダウンロードします

  • curlpause_cont :アップロードしてダウンロードします

例:ファイルのダウンロードを一時停止します

次の例は、ファイルのダウンロード中に一時停止し、一定期間後に回復する方法を示しています。

 <?php
$ch = curl_init();

// ダウンロードするには、ファイルアドレスを設定します
curl_setopt($ch, CURLOPT_URL, "https://m66.net/files/testfile.zip");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// データを受信するときにコールバック関数を設定します
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $data) {
    static $totalReceived = 0;

    $totalReceived += strlen($data);
    echo "Received " . $totalReceived . " bytes\n";

    if ($totalReceived > 1024 * 100) { // もっとダウンロードしてください100KBその後一時停止します
        echo "Pausing download...\n";
        curl_pause($ch, CURLPAUSE_RECV);
        sleep(5); // セキュリティ検証またはイベントの応答を待つシミュレーションを開きます
        echo "Resuming download...\n";
        curl_pause($ch, CURLPAUSE_CONT);
    }

    return strlen($data);
});

curl_exec($ch);
curl_close($ch);
?>

この例では、 curlopt_writefunctionを介してデータ受信の処理ロジックをカスタマイズし、100kbを超える累積ダウンロード後にレセプションを一時停止し、curl_pause( $ ch、curlpause_cont)で再開します。

例:ファイルのアップロードを一時停止します

投稿を使用してファイルをサーバーにアップロードすると、同様の方法でアップロードの途中で一時停止することもできます。

 <?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://m66.net/upload");
curl_setopt($ch, CURLOPT_POST, true);

// ファイルを開き、アップロードフィールドを設定します
$file = fopen("testfile.zip", "r");
curl_setopt($ch, CURLOPT_INFILE, $file);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("testfile.zip"));

// データをアップロードするためのコールバック関数を設定します
curl_setopt($ch, CURLOPT_READFUNCTION, function ($ch, $fd, $length) {
    static $uploaded = 0;
    $chunk = fread($fd, $length);
    $uploaded += strlen($chunk);

    if ($uploaded > 1024 * 50) { // 以上アップロードします50KBその後一時停止します
        echo "Pausing upload...\n";
        curl_pause($ch, CURLPAUSE_SEND);
        sleep(3); // シミュレートされたセキュリティメカニズムは、トリガーまたは認証の遅延をトリガーします
        echo "Resuming upload...\n";
        curl_pause($ch, CURLPAUSE_CONT);
    }

    return $chunk;
});

curl_exec($ch);
fclose($file);
curl_close($ch);
?>

この例は、アップロードプロセス中にアップロードの進行状況を動的に制御する能力を示しています。一時的な中断は、特定のアップロードボリュームの後に行われ、セキュリティメカニズムまたは外部システムの応答時間を残し、その後アップロードを継続します。

送信セキュリティの強化

curl_pause()の能力と組み合わせると、データ送信プロセスはより安全に管理できます。

  1. 認証プロセスに協力します。認証結果が戻る前にデータフローを一時停止して、不正なデータ送信を避けます。

  2. 異常なトラフィックに対処する:検出された異常な動作または交通パターンを一時停止して、資源の廃棄物を減らします。

  3. プログレッシブトランスミッション:バッチ内の大きなファイルを一時停止、転送、検証して、安定性と断層許容度を向上させます。

要約します

curl_pause()は、特に高度に利用可能で制御可能なデータ送信システムを構築する場合、より細かい粒状制御手段を提供します。一時停止と回復操作を柔軟に組み合わせることにより、より安全な伝送制御を実現するだけでなく、リソースの使用を最適化し、システムの堅牢性を向上させることもできます。この機能を習得すると、PHPプログラムが複雑なネットワーク環境に直面する際に、さまざまな課題により冷静に対応できるようになります。