2011-07-29 8 views
2

私は、コールバック関数の1つからcurl_close()を考えることしかできませんでした。 phpが警告をスローします:中間のカールの移動を中止します

PHP警告:curl_close():コールバックからのcURLハンドルのクローズを試みます。

どうすればいいですか?問題はそれがカールを実行に時間がかかりすぎている場合には、あなたが時間を設定することができ

+0

コードを投稿する必要があります。 –

+0

さらに詳しい情報を追加できますか? **なぜあなたが終了する前に転送を終了したいのですか – wonk0

答えて

0

、たとえば

<?php 
$c = curl_init('http://slow.example.com/'); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 15); 
$page = curl_exec($c); 
curl_close($c); 
echo $page; 
+0

私はアルゴリズムを決定するときに私はそれを殺す必要があるので、私は "実行するには時間がかかりすぎる"より高度なアルゴリズムを使用していません。 – Mark

3

あなたは偽か何かにコールバック関数から、現在ダウンロードしたデータの長さものではありません返すことができますカールを中止する

+0

+1、curl_setoptのPHPマニュアルからもう少し詳しく:CURLOPT_WRITEFUNCTIONコールバック関数が2つのパラメータをとるコールバック関数の名前。最初のものはcURLリソースで、2番目のものは書き込まれるデータの文字列です。このコールバック関数を使用してデータを保存する必要があります。書き込まれた正確なバイト数を返す必要があります。そうでない場合は、エラーが発生して転送が中止されます。 –

0

私は同じような問題を抱え、真ん中のカールの移動を止めることができました。これは、私の個人的なトップテンの中で、いつも働いているような汚いハックの中に簡単にあります。

アップロードのキャンセル時期を知っているカールリード関数を作成します。

function curlReadFunction($ch, $fileHandle, $maxDataSize){ 

    if($GLOBALS['abortTransfer'] == TRUE){ 
     sleep(1); 
     return ""; 
    } 
    return fread($fileHandle, $maxDataSize); 
} 

また、データの読み取り速度が一定時間低すぎると、Curlは停止するように指示します。

curl_setopt($ch, CURLOPT_READFUNCTION, 'curlReadFunction'); 
curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT, 1024); 
curl_setopt($ch, CURLOPT_LOW_SPEED_TIME, 5); 

これにより、アップロード中にカールの転送が中止されます。明らかに理想的ではありませんが、うまくいくようです。

関連する問題