php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #52284 Reproducible crash using curl_multi functions with FTP
Submitted: 2010-07-08 10:00 UTC Modified: 2010-08-17 14:32 UTC
Votes:4
Avg. Score:4.2 ± 1.3
Reproduced:4 of 4 (100.0%)
Same Version:1 (25.0%)
Same OS:1 (25.0%)
From: aharvey@php.net Assigned:
Status: Not a bug Package: cURL related
PHP Version: 5.3SVN-2010-07-08 (SVN) OS: Ubuntu 10.04 (and others)
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: aharvey@php.net
New email:
PHP Version: OS:

 

 [2010-07-08 10:00 UTC] aharvey@php.net
Description:
------------
The attached script segfaults on most executions. This occurs both on Linux and Windows and is reasonably, but not completely, reliable.

The valgrind output attached below kind of suggests memory corruption somewhere, but I'm hoping someone with more knowledge of curl can look into this, since I don't have the time at present for a detailed investigation.

Note that I'm not the original reporter of this bug (dumont reported it on ##php), but since I've generated the backtraces and have it crashing reliably, he/she has asked me to post the bug report.

Test script:
---------------
<?php
set_time_limit(0);
$urls = array('/test123.txt', '/test123.txt', '/test123.txt', '/test123.txt', '/test123.txt', '/test123.txt', '/test123.txt', '/test123.txt');//, '/test123.txt', '/test123.txt', '/test123.txt', '/test123.txt', '/test123.txt', '/test123.txt', '/test123.txt');

$threads = 5;
$timeout = 300;

$mcurl = curl_multi_init();
$threadsRunning = 0;
$urls_id = 0;
for(;;) {
	// Fill up the slots
	while ($threadsRunning < $threads && $urls_id < count($urls)) {
		echo 'Adding download link: '.$urls[$urls_id].'-URLID: '.$urls_id.'-URL: '.'ftp://test12345678:test12345678@www.ftpwt.com/'.$urls[$urls_id]."<br>\r\n";
		flush();
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
		curl_setopt($ch, CURLOPT_URL, 'ftp://test12345678:test12345678@www.ftpwt.com/'.$urls[$urls_id]);
		curl_multi_add_handle($mcurl, $ch);
		$urls_id++;
		$threadsRunning++;
	}
	// Check if done
	if($threadsRunning == 0 && $urls_id >= count($urls))
	{
		echo 'NO MORE THREADS LEFT';
		break;
	}
	// Let mcurl do it's thing
	curl_multi_select($mcurl);
	while(($mcRes = curl_multi_exec($mcurl, $mcActive)) == CURLM_CALL_MULTI_PERFORM)
	{
		usleep(10000);
	}
	if($mcRes != CURLM_OK)
	{
		echo '!!!NOT OK!!!';
		break;
	}
	while($done = curl_multi_info_read($mcurl)) {
		$ch = $done['handle'];
		$done_url = curl_getinfo($ch);//CURLINFO_EFFECTIVE_URL
		$done_content = curl_multi_getcontent($ch);
		echo $done_content."<br>";
		#if(curl_errno($ch) == 0) {
		#			$count = (preg_match('#of about <b>([^>]+)</b>#i', $done_content, $g) ? $g[1] : 'many');
		#			echo "Link <a href='$done_url'>$done_url</a> found $count links.<br>\n";
		#			flush();
		#		} else {
		#			echo "Link <a href='$done_url'>$done_url</a> failed: ".curl_error($ch)."<br>\n";
		#			flush();
		#		}
		echo 'removing curlmulti handle';
		curl_multi_remove_handle($mcurl, $ch);
		echo 'REMOVED curlmulti handle';
		curl_close($ch);
		$threadsRunning--;
	}
}
curl_multi_close($mcurl);
echo 'Done.';
?>

Expected result:
----------------
Not a segfault. :)

Actual result:
--------------
(gdb) r curl.php
Starting program: /usr/local/bin/php curl.php
[Thread debugging using libthread_db enabled]
Adding download link: /test123.txt-URLID: 0-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 1-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 2-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 3-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 4-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handleAdding download link: /test123.txt-URLID: 5-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 6-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 7-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handleNO MORE THREADS LEFT
Program received signal SIGSEGV, Segmentation fault.
0x00000000005751dc in curl_write_header (
    data=0x14d6bb8 "221-Goodbye. You uploaded 0 and downloaded 1 kbytes.\r\n221 Logout.\r\n), 45.85 Kbytes per second\r", size=1, nmemb=54, ctx=0x14824e0)
    at /home/aharvey/php/php/php-src/branches/PHP_5_3/ext/curl/interface.c:1119
1119		php_curl_write *t   = ch->handlers->write_header;
(gdb) bt
#0  0x00000000005751dc in curl_write_header (
    data=0x14d6bb8 "221-Goodbye. You uploaded 0 and downloaded 1 kbytes.\r\n221 Logout.\r\n), 45.85 Kbytes per second\r", size=1, nmemb=54, ctx=0x14824e0)
    at /home/aharvey/php/php/php-src/branches/PHP_5_3/ext/curl/interface.c:1119
#1  0x00007ffff5477c26 in Curl_client_write () from /usr/lib/libcurl.so.4
#2  0x00007ffff54785ad in ftp_readresp () from /usr/lib/libcurl.so.4
#3  0x00007ffff547b2ed in ftp_statemach_act () from /usr/lib/libcurl.so.4
#4  0x00007ffff547c64f in ftp_easy_statemach () from /usr/lib/libcurl.so.4
#5  0x00007ffff547c792 in ftp_disconnect () from /usr/lib/libcurl.so.4
#6  0x00007ffff547e9b2 in Curl_disconnect () from /usr/lib/libcurl.so.4
#7  0x00007ffff5494813 in curl_multi_cleanup () from /usr/lib/libcurl.so.4
#8  0x000000000057c243 in _php_curl_multi_close (rsrc=0x147b278) at /home/aharvey/php/php/php-src/branches/PHP_5_3/ext/curl/multi.c:327
#9  0x0000000000991217 in list_entry_destructor (ptr=0x147b278) at /home/aharvey/php/php/php-src/branches/PHP_5_3/Zend/zend_list.c:184
#10 0x000000000098e0a3 in zend_hash_del_key_or_index (ht=0x122a6d0, arKey=0x0, nKeyLength=0, h=4, flag=1)
    at /home/aharvey/php/php/php-src/branches/PHP_5_3/Zend/zend_hash.c:497
#11 0x0000000000990d2b in _zend_list_delete (id=4) at /home/aharvey/php/php/php-src/branches/PHP_5_3/Zend/zend_list.c:58
#12 0x000000000057c210 in zif_curl_multi_close (ht=1, return_value=0x14864c0, return_value_ptr=0x0, this_ptr=0x0, return_value_used=0)
    at /home/aharvey/php/php/php-src/branches/PHP_5_3/ext/curl/multi.c:319
#13 0x00000000009b3d56 in zend_do_fcall_common_helper_SPEC (execute_data=0x7ffff7e77090)
    at /home/aharvey/php/php/php-src/branches/PHP_5_3/Zend/zend_vm_execute.h:316
#14 0x00000000009b86db in ZEND_DO_FCALL_SPEC_CONST_HANDLER (execute_data=0x7ffff7e77090)
    at /home/aharvey/php/php/php-src/branches/PHP_5_3/Zend/zend_vm_execute.h:1606
#15 0x00000000009b3109 in execute (op_array=0x1479480) at /home/aharvey/php/php/php-src/branches/PHP_5_3/Zend/zend_vm_execute.h:107
#16 0x000000000097dc6c in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /home/aharvey/php/php/php-src/branches/PHP_5_3/Zend/zend.c:1194
#17 0x00000000008fe388 in php_execute_script (primary_file=0x7fffffffe0b0) at /home/aharvey/php/php/php-src/branches/PHP_5_3/main/main.c:2260
#18 0x0000000000a6aaf1 in main (argc=2, argv=0x7fffffffe318) at /home/aharvey/php/php/php-src/branches/PHP_5_3/sapi/cli/php_cli.c:1192


Valgrind output:

aharvey@aharvey-desktop:/tmp$ valgrind php curl.php 
==12870== Memcheck, a memory error detector
==12870== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==12870== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info
==12870== Command: php curl.php
==12870== 
Adding download link: /test123.txt-URLID: 0-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 1-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 2-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 3-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 4-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handleAdding download link: /test123.txt-URLID: 5-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 6-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
Adding download link: /test123.txt-URLID: 7-URL: ftp://test12345678:test12345678@www.ftpwt.com//test123.txt<br>
111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handle111<br>removing curlmulti handleREMOVED curlmulti handle<br>removing curlmulti handleREMOVED curlmulti handleNO MORE THREADS LEFT==12870== Invalid read of size 8
==12870==    at 0x5751DC: curl_write_header (interface.c:1119)
==12870==    by 0x756DC25: Curl_client_write (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x756E5AC: ftp_readresp (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x75712EC: ftp_statemach_act (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x757264E: ftp_easy_statemach (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x7572791: ftp_disconnect (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x75749B1: Curl_disconnect (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x758A812: curl_multi_cleanup (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x57C242: _php_curl_multi_close (multi.c:327)
==12870==    by 0x991216: list_entry_destructor (zend_list.c:184)
==12870==    by 0x98E0A2: zend_hash_del_key_or_index (zend_hash.c:497)
==12870==    by 0x990D2A: _zend_list_delete (zend_list.c:58)
==12870==  Address 0x5a5a5a5a5a5a5a62 is not stack'd, malloc'd or (recently) free'd
==12870== 
==12870== 
==12870== Process terminating with default action of signal 11 (SIGSEGV)
==12870==  General Protection Fault
==12870==    at 0x5751DC: curl_write_header (interface.c:1119)
==12870==    by 0x756DC25: Curl_client_write (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x756E5AC: ftp_readresp (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x75712EC: ftp_statemach_act (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x757264E: ftp_easy_statemach (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x7572791: ftp_disconnect (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x75749B1: Curl_disconnect (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x758A812: curl_multi_cleanup (in /usr/lib/libcurl.so.4.1.1)
==12870==    by 0x57C242: _php_curl_multi_close (multi.c:327)
==12870==    by 0x991216: list_entry_destructor (zend_list.c:184)
==12870==    by 0x98E0A2: zend_hash_del_key_or_index (zend_hash.c:497)
==12870==    by 0x990D2A: _zend_list_delete (zend_list.c:58)
==12870== 
==12870== HEAP SUMMARY:
==12870==     in use at exit: 3,263,498 bytes in 20,184 blocks
==12870==   total heap usage: 22,471 allocs, 2,287 frees, 3,875,285 bytes allocated
==12870== 
==12870== LEAK SUMMARY:
==12870==    definitely lost: 0 bytes in 0 blocks
==12870==    indirectly lost: 0 bytes in 0 blocks
==12870==      possibly lost: 298,550 bytes in 280 blocks
==12870==    still reachable: 2,964,948 bytes in 19,904 blocks
==12870==         suppressed: 0 bytes in 0 blocks
==12870== Rerun with --leak-check=full to see details of leaked memory
==12870== 
==12870== For counts of detected and suppressed errors, rerun with: -v
==12870== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 14 from 6)
Segmentation fault

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-07-20 10:00 UTC] profy dot net at gmail dot com
I see this bug too.
It happens to me when using curl_multi_* with 2 or more ftp urls inside.
Both under windows (XP SP3) and Ubuntu (8.10 and 9.10)
PHP 5.2.13
 [2010-07-20 10:32 UTC] pajoye@php.net
-Status: Open +Status: Feedback
 [2010-07-20 10:32 UTC] pajoye@php.net
Which CURL version?

Can you try with 5.3.3RC3 please on Windows (has the latest Curl)?
 [2010-07-21 10:49 UTC] profy dot net at gmail dot com
Hello&#13;&#10;&#13;&#10;Current PHP version under Win XP from phpinfo() :&#13;&#10;&#13;&#10;PHP Version 5.2.13&#13;&#10;System &#9;Windows NT OF 5.1 build 2600 &#13;&#10;Build Date &#9;Feb 24 2010 14:30:19 &#13;&#10;Configure Command &#9;cscript /nologo configure.js &#34;--enable-snapshot-build&#34; &#34;--enable-debug-pack&#34; &#34;--with-snapshot-template=d:\php-sdk\snap_5_2\vc6\x86\template&#34; &#34;--with-php-build=d:\php-sdk\snap_5_2\vc6\x86\php_build&#34; &#34;--with-pdo-oci=D:\php-sdk\oracle\instantclient10\sdk,shared&#34; &#34;--with-oci8=D:\php-sdk\oracle\instantclient10\sdk,shared&#34; &#34;--without-pi3web&#34; &#34;--enable-mongo=shared&#34; &#13;&#10;Server API &#9;Apache 2.0 Handler &#13;&#10;Virtual Directory Support &#9;enabled &#13;&#10;Configuration File (php.ini) Path &#9;C:\WINDOWS &#13;&#10;Loaded Configuration File &#9;D:\www2\php.ini &#13;&#10;Scan this dir for additional .ini files &#9;(none) &#13;&#10;additional .ini files parsed &#9;(none) &#13;&#10;PHP API &#9;20041225 &#13;&#10;PHP Extension &#9;20060613 &#13;&#10;Zend Extension &#9;220060519 &#13;&#10;Debug Build &#9;no &#13;&#10;Thread Safety &#9;enabled &#13;&#10;Zend Memory Manager &#9;enabled &#13;&#10;IPv6 Support &#9;enabled &#13;&#10;Registered PHP Streams &#9;php, file, data, http, ftp, compress.zlib, https, ftps, ssh2.shell, ssh2.exec, ssh2.tunnel, ssh2.scp, ssh2.sftp &#13;&#10;Registered Stream Socket Transports &#9;tcp, udp, ssl, sslv3, sslv2, tls &#13;&#10;Registered Stream Filters &#9;convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, zlib.*&#13;&#10;&#13;&#10;cURL support &#9;enabled &#13;&#10;cURL Information &#9;libcurl/7.20.0 OpenSSL/0.9.8h zlib/1.2.3&#13;&#10;&#13;&#10;I will test with 5.3.3RC3 and tell you the results
 [2010-07-21 10:51 UTC] profy dot net at gmail dot com
For some reason bugtracker breaks my previous message.&#13;&#10;So I will repeat it cutted&#13;&#10;&#13;&#10;PHP Version 5.2.13&#13;&#10;&#13;&#10;cURL support &#9;enabled &#13;&#10;cURL Information &#9;libcurl/7.20.0 OpenSSL/0.9.8h zlib/1.2.3&#13;&#10;&#13;&#10;I will test with 5.3.3RC3 now and post results here
 [2010-07-21 10:55 UTC] pajoye@php.net
Please copy the CURL&#39;s phpinfo block only, and using text only :)
 [2010-07-21 11:07 UTC] profy dot net at gmail dot com
Curl version: libcurl/7.20.0 OpenSSL/0.9.8h zlib/1.2.3
 [2010-07-21 12:31 UTC] profy dot net at gmail dot com
I&#38;#38;#39;ve tested with latest PHP5.3.3RC3 downloaded from http://windows.php.net/qa/ and it works fine now with 5 FTP and 3 HTTP parallel requests using curl_multi_* functions. This request failed before. cURL version is 7.21.0. It seems bug is fixed in latest curl.
 [2010-07-21 12:38 UTC] pajoye@php.net
-Status: Feedback +Status: Bogus
 [2010-07-21 12:39 UTC] pajoye@php.net
Was a libCurl issue, fixed in latest release.
 [2010-07-21 13:11 UTC] profy dot net at gmail dot com
Sorry for bothering you, but I see now that bug still exists. My code already had a workaround for that issue and I not disabled it when testing against latest version (5.3.3RC3 and libcurl 7.21.0). Now I&#39;ve tested again with truly parallel 5 ftp requests and it is still failing as it was with PHP 5.2.13 on Win XP SP3
 [2010-07-27 04:57 UTC] srinatar@php.net
-Status: Bogus +Status: Verified
 [2010-07-27 04:57 UTC] srinatar@php.net
able to reproduce this issue. here is the stack trace:

(gdb) where
#0  0x0000000000520a58 in curl_write_header (data=0x18d3b78 "221 Goodbye.\r\nomplete.\r", size=1, nmemb=14, ctx=0x1876e58)
    at /home/sriramn/dev/php-src/branches/PHP_5_3/ext/curl/interface.c:1123
#1  0x00007f106e187c26 in ?? () from /usr/lib/libcurl.so.4
#2  0x00007f106e1885ad in ?? () from /usr/lib/libcurl.so.4
#3  0x00007f106e18b2ed in ?? () from /usr/lib/libcurl.so.4
#4  0x00007f106e18c64f in ?? () from /usr/lib/libcurl.so.4
#5  0x00007f106e18c792 in ?? () from /usr/lib/libcurl.so.4
#6  0x00007f106e18e9b2 in ?? () from /usr/lib/libcurl.so.4
#7  0x00007f106e1a4813 in curl_multi_cleanup () from /usr/lib/libcurl.so.4
#8  0x0000000000527208 in _php_curl_multi_close (rsrc=0x1871970) at /home/sriramn/dev/php-src/branches/PHP_5_3/ext/curl/multi.c:327
#9  0x00000000007f246e in list_entry_destructor (ptr=0x1871970) at /home/sriramn/dev/php-src/branches/PHP_5_3/Zend/zend_list.c:184
#10 0x00000000007efa3b in zend_hash_del_key_or_index (ht=0xe1eaf0, arKey=0x0, nKeyLength=0, h=4, flag=1) at /home/sriramn/dev/php-src/branches/PHP_5_3/Zend/zend_hash.c:497
#11 0x00000000007f1fa0 in _zend_list_delete (id=4) at /home/sriramn/dev/php-src/branches/PHP_5_3/Zend/zend_list.c:58
#12 0x00000000005271d5 in zif_curl_multi_close (ht=1, return_value=0x187a140, return_value_ptr=0x0, this_ptr=0x0, return_value_used=0)
    at /home/sriramn/dev/php-src/branches/PHP_5_3/ext/curl/multi.c:319
 [2010-07-27 07:48 UTC] profy dot net at gmail dot com
Reproduced every time when call test script.

Test script:
---------------
<?php
function multi_request($urls, $url_options = array()) {
       $mh = curl_multi_init();
       foreach ($urls as $id => $url) {
               $curly[$id] = curl_init();
               curl_setopt($curly[$id], CURLOPT_URL, $url);
               curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, true);
               // I've add this opt to speed up request, bug appearing with or
without this line
               curl_setopt($curly[$id], CURLOPT_NOBODY, true);
               curl_multi_add_handle($mh, $curly[$id]);
       }

       $running = null;
       do {
               $status = curl_multi_exec($mh, $running);
               usleep(1000);
       } while($status == CURLM_CALL_MULTI_PERFORM || $running);

       foreach ($curly as $id => $c) {
               $result[$id] = curl_multi_getcontent($c);
               curl_multi_remove_handle($mh, $c);
               curl_close($c);
       }
       curl_multi_close($mh);

       return $result;
}

$urls = array(
       "4358521"       =>
"ftp://ftp.ea.com/pub/ea/patches/nfs-underground/pc/en-uk/NFSU_EUROPE_PATCH_4.exe",
       "7458288"       => "ftp://ftp.nero.com/software/plugins/WMAPlugin20937.exe",
);

echo "<pre>";
print_R(multi_request($urls));
echo "</pre>";
 [2010-07-27 16:49 UTC] srinatar@php.net
Ok, been debugging this since morning for fun. As Pierre mentioned earlier, this 
bug turns out to be a libcurl bug and a recent commit within libcurl fixes the 
underlying multi handler issue.

now, ubuntu has not shipped with recent versions of libcurl yet. so, you will 
need to manually download libcurl from below: and install to say /usr/local

http://curl.haxx.se/snapshots/

once this new curl is installed, you will need to recompile php with --with-
curl=/usr/local

if this satisfies ur concern, then we can close this bug.

hope this helps.
 [2010-07-27 17:18 UTC] pajoye@php.net
@srinata

I don't think there is a release after 7.21.0. We have to wait for it :)
 [2010-07-28 16:22 UTC] profy dot net at gmail dot com
I think recompile will help.
But I prefer to use distro's php versions for maintainability.
We use several ubuntu versions in production.
Anyway, I added workaround in my code to switch into one-thread mode when dealing with FTP urls while bug still exists in packaged php5-curl extension.
 [2010-08-17 14:32 UTC] iliaa@php.net
-Status: Verified +Status: Bogus
 [2010-08-17 14:32 UTC] iliaa@php.net
Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions.  Due to the volume
of reports we can not explain in detail here why your report is not
a bug.  The support channels will be able to provide an explanation
for you.

Thank you for your interest in PHP.

Not a PHP bug, the issue exists within libcurl.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Apr 26 09:01:29 2024 UTC