Edit report at https://bugs.php.net/bug.php?id=52558&edit=1

 ID:                 52558
 Updated by:         pierr...@php.net
 Reported by:        malaimo at sesda2 dot com
 Summary:            multi curl fails to return response, where curl
                     does.
-Status:             Open
+Status:             Not a bug
 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:

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

This is not a bug, if you set the option CURLOPT_VERBOSE you'll see that for 
every FTP download, curl will first attempt to use EPSV before using PASV. 
That's why you've got those "couldn't connect to host".

If you add curl_setopt($ch, CURLOPT_FTP_USE_EPSV, 0) you'll not get the error 
anymore. 

The error returned by curl_error is not always a "fatal", so it's not because 
you've got one that your call failed.


Previous Comments:
------------------------------------------------------------------------
[2011-12-29 11:34:02] jonathan dot bokobza at gmail dot com

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

------------------------------------------------------------------------
[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

Reply via email to