Edit report at https://bugs.php.net/bug.php?id=52558&edit=1
ID: 52558 Comment by: jonathan dot bokobza at gmail dot com Reported by: malaimo at sesda2 dot com Summary: multi curl fails to return response, where curl does. Status: Open Type: Bug Package: cURL related Operating System: linux 2.6.32-24 libcurl 7.21.0 PHP Version: 5.3.3 Block user comment: N Private report: N New Comment: same issue on windows 7 x64 with php 5.3.8 i think this might be related to curl version (7.22) according to : http://curl.haxx.se/changes.html#7_23_1 a new version was released with multiples bugs fixes Previous Comments: ------------------------------------------------------------------------ [2011-03-25 07:06:21] will at willolbrys dot com I think I encountered the same bug here: http://stackoverflow.com/questions/4780741/php-curl-multi-getcontent-partial-body-received/5429110#5429110 reprinted for simplicity: I encountered this bug while using the rolling-curl multicurl lib, but the underlying problem seems to be in php itself. Here's my 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 Under some circumstances (in my case CURLOPT_TIMEOUT was being maxed) curl_error and curl_errno would not properly report an error in the curl. I had to use the 'result' key from the array returned by curl_multi_info_read. That result code gave me the actual error number when the curl_err* functions reported everything as normal. ------------------------------------------------------------------------ [2010-08-06 15:09:19] malaimo at sesda2 dot com Description: ------------ When using both curl and multi_curl i get a curl_errno of 0 for each handle while an curl_error results a string error. When using multi_curl the error string is: Failed connect to ftp.nmh.ac.uk:21; Operation now in progress When using curl the error string is: couldn't connect to host Using multi_curl results in a null body returned with curl_multi_getcontent Using curl yields the data of the file when using curl_exec Test script: --------------- two scripts are below to reproduce. # multi_curl method <?php $curls = array(); $cmh = curl_multi_init(); $dlFiles = array( 'ftp://ftp.nmh.ac.uk/wdc/obsdata/hourval/single_year/1914/sod1914.wdc', 'http://spc.igpp.ucla.edu/uclamag/ffi/lal/B99300_LAL.ffd', 'ftp://ftp.nmh.ac.uk/wdc/obsdata/hourval/single_year/1922/hua1922.wdc', 'http://vmo.igpp.ucla.edu/data1/Weygand/ProcessedSolarWindGSE/ACE/mag/2000/acemag200001.dat' ); foreach ($dlFiles as $x => $file) { $curls[$x] = curl_init(); curl_setopt($curls[$x], CURLOPT_URL, $file); curl_setopt($curls[$x], CURLOPT_RETURNTRANSFER, 1); curl_setopt($curls[$x], CURLOPT_FOLLOWLOCATION, 1); curl_multi_add_handle($cmh, $curls[$x]); } $active = null; do { $mrc = curl_multi_exec($cmh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc == CURLM_OK) { if (curl_multi_select($cmh) != -1) { do { $mrc = curl_multi_exec($cmh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } foreach ($dlFiles as $x => $file) { var_dump(substr(curl_multi_getcontent($curls[$x]), 0, 10), curl_errno($curls[$x]), curl_error($curls[$x])); curl_multi_remove_handle($cmh, $curls[$x]); curl_close($curls[$x]); } curl_multi_close($cmh); ?> # curl method <?php $dlFiles = array( 'ftp://ftp.nmh.ac.uk/wdc/obsdata/hourval/single_year/1914/sod1914.wdc', 'http://spc.igpp.ucla.edu/uclamag/ffi/lal/B99300_LAL.ffd', 'ftp://ftp.nmh.ac.uk/wdc/obsdata/hourval/single_year/1922/hua1922.wdc', 'http://vmo.igpp.ucla.edu/data1/Weygand/ProcessedSolarWindGSE/ACE/mag/2000/acemag200001.dat' ); foreach ($dlFiles as $x => $file) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $file); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); var_dump(substr(curl_exec($ch), 0, 10), curl_errno($ch), curl_error($ch)); curl_close($ch); } ?> Expected result: ---------------- no errors at all and multi_curl letting me get the contents of the curl. Actual result: -------------- multi_curl bool(false) int(0) string(61) "Failed connect to ftp.nmh.ac.uk:21; Operation now in progress" string(10) "���� int(0) string(0) "" bool(false) int(0) string(61) "Failed connect to ftp.nmh.ac.uk:21; Operation now in progress" string(10) "01 01 2000" int(0) string(0) "" for curl string(10) "SOD1401X01" int(0) string(24) "couldn't connect to host" string(10) "���� int(0) string(0) "" string(10) "HUA22 1D 1" int(0) string(24) "couldn't connect to host" string(10) "01 01 2000" int(0) string(0) "" ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=52558&edit=1