2013-05-09 10 views
5

Curlには、私のユースケースが別のサーバからのデータを要求しやすくするための多くのオプションがあります。私のスクリプトはプロキシと似ており、これまでは別のサーバーからデータを要求していて、結果データが完成すると同時にクライアントに送信されます。PHP:curlとストリーム転送

  1. ユーザーが訪問http://te.st/proxy.php?get=xyz

  2. proxy.phpダウンロードXYZ外部サーバから

    ダウンロードが100%完了している
  3. 、それが出力データ

私は、2と3がパラレルで(php5-curlで)実行できるかどうか、例えば、プロキシストリームのように、thを待つことなくオンザフライでデータを転送するe最後の行。

ファイルサイズが平均20MBの場合、これは大きな違いがあります。

これはカールするオプションがありますか?

答えて

6

http://www.php.net/manual/en/function.curl-setopt.php#26239

そのような何か(テストされていない)を見てみましょう:

function myProgressFunc($ch, $str){ 
    echo $str; 
    return strlen($str); 
} 

curl_setopt($ch, CURLOPT_WRITEFUNCTION, "myProgressFunc"); 

読むもここParallelCurl with CURLOPT_WRITEFUNCTION

+0

完璧ではありませんが、バッファリングされています。これは、ファイルストリーミングに使用される可能性があることを意味しますが、イベントストリームの場合、最新のイベントはカールの中で到達不能になります( 'flush()'はそれらをすべてエコーするのに役立たない)。それは残念だ。とにかくあなたに+1してください。 – user

1

はなく、実際にフルを待っているのファイルをストリームコードですファイルをバッファに入れます。

$url = YOUR_URL_HERE; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($curl, $data) { 
    echo $data; 
    ob_flush(); 
    flush(); 
    return strlen($data); 
}); 
curl_exec($ch); 
curl_close($ch); 
関連する問題