2011-11-06 5 views
8

내 스크립트가 요청을 보내고 API가 보낸 응답을 무시할 수 있도록 PHP cURL 구성이 필요합니다.PHP cURL 만 보내고 응답을 기다리지 않아야합니다.

curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,count($fields)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
//curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100); 
$result = curl_exec($ch); 
echo $result; 
curl_close ($ch); 

내가 추가하는 시도 : // curl_setopt ($ ch를, CURLOPT_RETURNTRANSFER, 거짓을); // curl_setopt ($ ch, CURLOPT_TIMEOUT_MS, 100);

그러나 제대로 작동하지 않으며 API 웹 서버가 요청을 수신하지 않습니다.

이유는 API에 많은 양의 요청을 보내므로 각 요청을 기다리기 때문에 스크립트가 매우 느립니다.

도움을 주시면 감사하겠습니다.

답변

6

`

public function cccc($test=1) { 
if($test==1) { 
    $url = 'http://examplesite.com/test/cccc/2'; 
    $curl = curl_init();     
    $post['test'] = 'test'; 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt ($curl, CURLOPT_POST, TRUE); 
    curl_setopt ($curl, CURLOPT_POSTFIELDS, $post); 

    curl_setopt($curl, CURLOPT_USERAGENT, 'api'); 
    curl_setopt($curl, CURLOPT_TIMEOUT, 1); 
    curl_setopt($curl, CURLOPT_HEADER, 0); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); 
    curl_setopt($curl, CURLOPT_FORBID_REUSE, true); 
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 1); 
    curl_setopt($curl, CURLOPT_DNS_CACHE_TIMEOUT, 10); 

    curl_setopt($curl, CURLOPT_FRESH_CONNECT, true); 

    $data = curl_exec($curl); 
    echo $data; 


    curl_close($curl); 
} else { 
    ob_end_clean(); 
    header("Connection: close\r\n"); 
    header("Content-Encoding: none\r\n"); 
    header("Content-Length: 1"); 
    ignore_user_abort(true); 

    sleep(10); 
    $this->db->query('UPDATE new_hook_memory SET new=new+1 WHERE id=1');  

    }} 

// 테스트

`

+20

코드에 덧글을 추가하지 않으셨습니까? 이것은 쓸모가 없다. –

+1

신난다, 작동한다, 고마워! –

+0

이 작동하지만, 너무 작은 시간 제한 (제 경우에는 10 밀리 초)을 설정하면 요청이 완전히 전송되기 전에 중단됩니다. –

0

요청이 성공했는지 여부를 어떻게 알 수 있습니까? 적어도 서버의 상태 코드를 확인하기 위해 기다려야합니다. 대기 시간이 문제가되면 curl multi API를 사용하여 여러 요청을 동시에 수행하십시오. 상태 코드가 반환되면 반환 된 데이터의 수신을 중단하는 쓰기 콜백 함수를 설정할 수 있어야합니다. 당신이 배경 wget을 실행할 수 있습니다 가능하면

3

말 현재

+0

이 문제는 해결되지 않습니다. 이것은 backgrounding curl과 동일하며 응답을 기다리는 프로세스가 있으며 계산 자원을 소비합니다. – Bladt

2

비트를 (exec 사용)하지만이에 대한 솔루션 관심있는 사람은 CURLOPT_RETURNTRANSFER가 FALSE가 아닌 TRUE로 설정되어야한다는 것입니다. 그런 식으로 curl_exec 함수는 반환하기 전에 요청이 완료 될 때까지 기다리는 대신 즉시 값을 반환합니다. 즉, 동 기적으로가 아니라 비동기 적으로 동작합니다.

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
+2

Reza가 다른 질문을했습니다 – popas

+2

왜이 답변에는 아직 2 점이 있습니까? –

+0

CURLOPT_RETURNTRANSFER를 true로 설정하면 요청이 완료 될 때까지 기다리지 않고 곧바로 반환 값을 얻었습니다. OP가 요구 한 것이 아닌가? – ljelewis

관련 문제