2013-05-14 3 views
4

여기 코드에 대한이 partial_response.php에서 부분 반응을 얻으려고 노력 오전 내 코드PHP cURL을 사용하여 부분 응답을받을 수 있습니까?

$url = "partial_response.php"; 
$sac_curl = curl_init(); 
curl_setopt($sac_curl, CURLOPT_HTTPGET, true); 
curl_setopt($sac_curl, CURLOPT_URL, $url); 
curl_setopt($sac_curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($sac_curl, CURLOPT_HEADER, false); 
curl_setopt($sac_curl, CURLOPT_TIMEOUT, 11); 
$resp = curl_exec($sac_curl); 
curl_close($sac_curl); 
echo $resp; 

Partial_response.php

header('Content-type: text/html; charset=utf-8'); 
echo 'Job waiting ...<br />'; 
for($i = 0 ; $i &#60; 10 ; $i++) 
{ 
echo $i . '<br/>'; 
flush(); 
ob_flush(); 
sleep(1); 
} 
echo 'End ...<br/>'; 

입니다. 내가 원하는 것은 partial_response.php가 루프를 완료하고 전체 데이터를 반환하기를 기다리는 대신 "Job waiting .."이라고 혼자 돌아 오는 컬이 필요하다는 것입니다. 그래서 내가 11 이하의 CURLOPT_TIMEOUT을 줄이면 전혀 응답을 얻지 못합니다. 친절히 내 의심을 분명히합니다. 미리 감사드립니다.

+0

문제는 * 응답 *이 ​​끝나는 시점이 아니라 추측 할 수 있지만 * 전송 * 끝 부분에 있습니다. 제 생각에 당신의'Partial_response.php'는 실행이 끝날 때 데이터를 보내므로 절대로 시간 초과가 없어서 결코 얻을 수 없을 것입니다 (끝나지 않아서 데이터가 보내지지 않습니다). 'flush()'함수를 단독으로 사용하거나'CURLOPT_WRITEFUNCTION'과 함께 사용하여 부분 출력을 얻으십시오. – Ranty

답변

1

아니요, 두렵습니다. 적어도 내가 아는 것은 아니지만, 이것은 PHP가 동기식 언어이기 때문에 단순히 작업을 건너 뛸 수 없다는 것을 의미합니다. (즉 curl_exec() 항상 것 - 상관없이 - 요청이 완료 될 때까지 실행) 나중에 컬 내가 원하는 일을 할 수 없다는 것을 깨달았다

+1

그게 전부 괜찮아요, 아무도 나를 PHP 로이 문제를 해결하기 위해 어떤 방법으로 말할 수 있습니까? –

+1

사실이 아닙니다. Curl은 반복되는 데이터를 가져옵니다. 모든 데이터가 일정량의 데이터를 반환합니다 (대용량 파일/페이지를 가져 오는 것으로 생각하면 분명합니다). 'CURLOPT_WRITEFUNCTION'을 사용하여 요청의 부분 데이터를 저장할 수 있습니다. – Ranty

+0

고마워요 Ranty it worked !! –

관련 문제