ネットワークデータ転送にPHPを使用する場合、 Curlは非常に一般的で強力なツールです。リモートサーバーにファイルをアップロードする場合でも、リモートサーバーからファイルをダウンロードする場合でも、 Curlは柔軟な制御方法を提供できます。ネットワークの一時的な中断、特定の検証メカニズムが完了するのを待つ、特定のセキュリティイベントへの応答などのアプリケーションシナリオでは、ファイルのアップロードまたはダウンロードの操作を一時停止したいと考えています。 PHPの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()の能力と組み合わせると、データ送信プロセスはより安全に管理できます。
認証プロセスに協力します。認証結果が戻る前にデータフローを一時停止して、不正なデータ送信を避けます。
異常なトラフィックに対処する:検出された異常な動作または交通パターンを一時停止して、資源の廃棄物を減らします。
プログレッシブトランスミッション:バッチ内の大きなファイルを一時停止、転送、検証して、安定性と断層許容度を向上させます。
curl_pause()は、特に高度に利用可能で制御可能なデータ送信システムを構築する場合、より細かい粒状制御手段を提供します。一時停止と回復操作を柔軟に組み合わせることにより、より安全な伝送制御を実現するだけでなく、リソースの使用を最適化し、システムの堅牢性を向上させることもできます。この機能を習得すると、PHPプログラムが複雑なネットワーク環境に直面する際に、さまざまな課題により冷静に対応できるようになります。