2013-05-14 108 views
4

这里是我的代码使用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部分缓解。我想要的是,我需要curl来单独返回“Job waiting ..”,而不是等待partial_response.php完成循环并返回整个数据。所以当我将CURLOPT_TIMEOUT降低到11以下时,我根本没有得到任何回应。请澄清我的疑问。 在此先感谢。

+0

我想这个问题并不是在*得到*响应的结尾,而是在*发送它的结尾。我认为,自从你的'Partial_response.php'在执行结束时发送数据以来,你永远不会以低超时获得它(它不会达到它的结束,所以数据不会被发送)。单独尝试'flush()'函数或与'CURLOPT_WRITEFUNCTION'一起接收部分输出。 – Ranty 2013-05-14 22:52:01

回答

1

不,恐怕不是。至少不是我所知道的,这仅仅是因为PHP是一种同步语言,这意味着你不能“跳过”任务。 (例如,curl_exec()将永远 - 无论如何 - 直到请求完成后才执行)

+1

这很好,谁能告诉我有没有其他方法来解决这个问题,使用PHP? – 2013-05-14 16:35:40

+1

这是不正确的。 Curl按迭代顺序获取数据,每个数据都返回一定数量的数据(如果考虑抓取大文件/页面,这会变得很明显)。您可以使用'CURLOPT_WRITEFUNCTION'来保存请求中的部分数据。 – Ranty 2013-05-14 22:49:22

+0

非常感谢它Ranty它工作! – 2013-05-15 07:05:25