curl_exec vs curl_multi_getcontent

时间:2011-11-16 03:30:58

标签: php performance image curl

所以我试图从远程站点获取图像的内容(它的前700个字节):

$headers = array(
"Range: bytes=0-700"
);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$raw = curl_exec($curl);
curl_close($curl);
@$im = imagecreatefromstring($raw);

其中$ url是一些远程图像....它工作得很好

但是当我使用curl_multi_getcontent时,

$h = curl_init();
$headers = array(
"Range: bytes=0-700"
);
curl_setopt($h, CURLOPT_URL, $url);
curl_setopt($h, CURLOPT_HEADER, $headers); 
curl_setopt($h, CURLOPT_RETURNTRANSFER, 1); //return the image value

$mh = curl_multi_init();
curl_multi_add_handle($mh, $h);

$running = null;
do {
   curl_multi_exec($mh, $running);
} while ($running > 0);

$raw = curl_multi_getcontent($h);
@$im = imagecreatefromstring($raw);

PHP会在@$im = imagecreatefromstring($raw);行抱怨数据不是可识别的格式

我做错了什么?我想使用multi exec选项,因为我可以将它并行化....

我也尝试将这一行更改为多段中的curl_setopt($h, CURLOPT_HEADER, $headers);进入CURLOPT_HTTPHEADER,就像第一行一样,但是连接被重置并且再一次是由于imagecreatefromstring,因为在评论该行后,它没有' t重置

1 个答案:

答案 0 :(得分:1)

您的第二个版本的代码包含:

curl_setopt($h, CURLOPT_HEADER, $headers); 

这指示cURL返回带有结果的HTTP标头(即CURLOPT_HEADER,TRUE)

要解决此问题,请使用:

curl_setopt($h, CURLOPT_HTTPHEADER, $headers);