2

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

我要取的正文不是很大,3100 个字符。服务器上的 Apache 日志显示内容长度为 3100。但是,curl_multi_getcontent 返回的字符串被剪切为 1290 个字符。

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

有任何想法吗?

4

2 回答 2

1

这个踢了我的屁股。这似乎是 php5 的(多?)curl 系统中的一个错误。我在使用 rolling-curl multicurl lib 时遇到了这个错误,但根本问题似乎出在 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 返回的数组中的“结果”键。当 curl_err* 函数报告一切正常时,该结果代码给了我实际的错误号。

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

于 2011-03-25T06:04:20.507 回答
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 第二个参数宣布所有 url 完成。

重现步骤:

  • PHP < 5.2,一个url,传输时间为几秒。
于 2012-03-05T13:12:10.247 回答