收到PHP curl_multi_getcontent部分正文

时间:2011-01-24 10:04:28

标签: php apache curl curl-multi

我正在努力解决这个问题。

我所取得的身体不是很大,3100个字符。服务器上的Apache日志表示内容长度为3100.但是,curl_multi_getcontent返回的字符串被剪切为1290个字符。

通常curl_multi_getcontent()工作正常,但有时我们会得到这种奇怪的行为。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这个踢了我的屁股。它似乎是php5(多?)卷曲系统中的一个错误。我在使用rolling-curl multicurl lib时遇到了这个bug,但潜在的问题似乎是在php本身。这是我的php -v:

PHP 5.3.3-1ubuntu9.3 with Suhosin-Patch (cli) (built: Jan 12 2011 16:07:38) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

在某些情况下(在我的情况下,CURLOPT_TIMEOUT被最大化),curl_error和curl_errno将无法正确报告curl中的错误。我不得不使用curl_multi_info_read返回的数组中的'result'键。当curl_err *函数报告一切正常时,结果代码给了我实际的错误号。

我认为此问题与此错误报告有关:http://bugs.php.net/bug.php?id=52558

答案 1 :(得分:0)

我的代码错过了对正在进行的转移的检查。

正在进行转移:

http_code = 200
errno = 0
download_content_length = total length, e.g. 1M
size_download = current position, <= download_content_length

似乎while(curlm_multi_exec == CURLM_CALL_MULTI_PERFORM)有点不足。 我们必须循环使用usleep,直到这个url的大小匹配或multi_exec第二个参数宣布所有网址都已完成。

重现的步骤:

  • PHP&lt; 5.2,一个网址,传输时间为几秒钟。