2012-03-27 9 views
4

私はカールコンテキストを再利用してリクエストを出し、リクエストを取得しようとしているコードをいくつか持っています。 CURLOPT_INFILEリソースがPHPでPUTリクエストを行った後にcUrlコンテキストを再利用する方法

は、私はPHPのshutup演算子を使用することができますデフォルトにリセットし、離れて行ってしまったが、私はむしろ、希望:

curl_exec():各要求を入れた後、get要求は、このPHPの警告で失敗しますカールのコンテキストを適切にリセットしてください。誰もこれを行う方法を知っていますか?私はまた別のカールのコンテキストを使用することができますが、アプリケーションが多くの要求を送信しているので、むしろ接続を再利用したいと思います。私は、ファイルがオープンハンドル保つことができるが、それは私がなどdoPutメソッドdoGetメソッド

$curlContext = curl_init(); 
$fh = fopen('someFile.txt', 'rw'); 
curl_setopt($curlContext, CURLOPT_URL, $someUrl); 
curl_setopt($curlContext, CURLOPT_PUT, TRUE); 
curl_setopt($curlContext, CURLOPT_INFILE, $fh); 
curl_setopt($curlContext, CURLOPT_INFILESIZE, $size); 
$curl_response1 = curl_exec($curlContext); 
fclose($fh); 
curl_setopt($curlContext, CURLOPT_PUT, FALSE); 
curl_setopt($curlContext, CURLOPT_HTTPGET, TRUE); 
curl_setopt($curlContext, CURLOPT_URL, $someOtherUrl); 
$curl_response1 = curl_exec($curlContext); 

感謝を呼び出すことができますので、これはすべての機能に包まれている、特に以来、ハックソリューションのように思えます。

+0

申し訳ありません。私はこの質問のためにタイプした素早い疑似コードを間違えてしまった。私はCURLOPT_HTTPGETを意味し、CURLOPT_GETは意味しません。 – razzard

答えて

0

あなたは、単にますcurl_setopt($ curlContext、CURLOPT_INFILE、STDIN)を行い、コンテキストfcloseを($ FH)の後

$file = 'log.txt'; 
$fh = fopen($file, 'rw'); 

$options = array(
     CURLOPT_URL => 'http://localhost/lab/stackoverflow/b.php', 
     CURLOPT_PUT => 1, 
     CURLOPT_INFILE => $fh, 
     CURLOPT_INFILESIZE => filesize($file), 
     CURLOPT_HEADER => false 
); 

// First Request 
curl_setopt_array($ch = curl_init(), $options); 
echo curl_exec($ch); 
fclose($fh); 

// Secound Request 
$options[CURLOPT_URL] = "http://localhost/lab/stackoverflow/c.php"; 
unset($options[CURLOPT_INFILE], $options[CURLOPT_INFILESIZE]); 
curl_setopt_array($ch = curl_init(), $options); 
echo curl_exec($ch); 
+0

値をCURLOPT_INFILEに設定してからcurl_execに設定し、CURLOPT_INFILEファイルハンドルをfcloseすると、次のcurl_execコールはCURLOPT_INFILEリソースがなくなったと不満を持ちます。 私はrazzardがPUT後に同じハンドルを再利用する方法について質問しており、その質問に答えていないと思います。 –

1

を使用して再のではなく、curl_setopt_arrayを使用することができます。

"CURLOPT_INFILEリソースがなくなり、デフォルトにリセットされました"という警告が表示されなくなります。

1

PHP 5.5以降では、curl_resetを使用して、以前の設定オプションをすべてリセットすることができます。

PHP <の場合、Li-chih Wuの解決策が考えられます。