php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #15491 Curl and PHP_CURL_RETURN wrong behavior
Submitted: 2002-02-10 14:54 UTC Modified: 2002-03-03 11:30 UTC
Votes:1
Avg. Score:1.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:0 (0.0%)
From: hans dot petrich at tronic-media dot com Assigned:
Status: Not a bug Package: cURL related
PHP Version: 4.1.1 OS: Linux 2.4 (RedHat 7.2)
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem:
16 + 5 = ?
Subscribe to this entry?

 
 [2002-02-10 14:54 UTC] hans dot petrich at tronic-media dot com
Hi,
i still working with the PHP's curl functions (PHP 4.1.1) .
When call curl_exec() and CURLOPT_RETURNTRANSFER ist set (to 1) via
curl_opt() - php quit with a Segfault when curl_exec() receive nothink from
the Server.
After i get the last CVS curl.c (V 1.105) the Segfault was fixed but php
return 1 (RETURN_TRUE)  in such situation.

I have write a small (and perhaps dirty) hack witch will fix this. Perhaps
the author of curl.c can update curl.c in the CVS to avoid the wrong return
value
Thank u, PHP is great.
Hans-Juergen Petrich


/* curl.c */



/* {{{ proto bool curl_exec(int ch)
   Perform a CURL session */
PHP_FUNCTION(curl_exec)
{
 zval      **zid;
 php_curl   *ch;
 CURLcode    error;

 if (ZEND_NUM_ARGS() != 1 ||
     zend_get_parameters_ex(1, &zid) == FAILURE) {
  WRONG_PARAM_COUNT;
 }
 ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl);

 error = curl_easy_perform(ch->cp);
 if (error != CURLE_OK) {
  if (ch->handlers->write->buf.len > 0)
   smart_str_free(&ch->handlers->write->buf);
  SAVE_CURL_ERROR(ch, error);
  RETURN_FALSE;
 }

    if (ch->handlers->write->method == PHP_CURL_RETURN) {
        if (ch->handlers->write->buf.len <= 0)
            RETURN_NULL();
        if (ch->handlers->write->type != PHP_CURL_BINARY)
            smart_str_0(&ch->handlers->write->buf);
        RETURN_STRINGL(ch->handlers->write->buf.c,
ch->handlers->write->buf.len, 0);
    }

 RETURN_TRUE;
}
/* }}} */


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-02-11 18:25 UTC] jacob at siamesecode dot com
This is the same bug I reported in report #15307, though I didn't provide a fix like Hans did. Way to go!
 [2002-02-11 18:51 UTC] hans dot petrich at tronic-media dot com
Its not exactly the same bug described in #15307.
Bug #15307 was fixed in the cvs of curl.c (V 1.103)

... i get the last CVS curl.c (V 1.105) the Segfault was fixed but
php
returns 1 (RETURN_TRUE)  in such situation.

Cheers
Hans-J?rgen Petrich
 [2002-03-03 11:30 UTC] sterling@php.net
This is the correct behaviour, it signifies that the request was successfully made, whether or not the server returns data is not a cURL thing...
 [2002-03-03 15:18 UTC] hans dot petrich at tronic-media dot com
mhhh...what i mean is:
If CURLOPT_RETURNTRANSFER set to 1 curl_exec() should return the transfered content instead of printing it out directly (see http://www.php.net/manual/en/function.curl-setopt.php)
In this case (when CURLOPT_RETURNTRANSFER=1) curl_exec() should return exactly the transfered content and not the statuscode

Have a look at the example:


<?php
	$url	=	'http://127.0.0.1/empty_document.html';#Its an empty html document
	$ch 	= 	curl_init($url);
	
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1);
	$content= curl_exec ( $ch);#returns 1, should return nothink
	echo "content of $url :$content"; 
	
	echo "\n";
	
	curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 0);
	echo "content of $url :";
	curl_exec ( $ch);# print out nothink - right
?>
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Sat Oct 19 03:01:27 2019 UTC