php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #27341 CURLOPT_CUSTOMREQUEST 'HEAD' misbehaves?
Submitted: 2004-02-21 02:41 UTC Modified: 2004-02-23 17:08 UTC
From: matteo at beccati dot com Assigned:
Status: Closed Package: cURL related
PHP Version: 4CVS, 5CVS (2004-02-23) OS: *
Private report: No CVE-ID: None
 [2004-02-21 02:41 UTC] matteo at beccati dot com
Description:
------------
Trying to help a friend which wanted to do a curl HEAD request with php (just like the shell curl -I does), I wrote down this code, without much checking:

$ch = curl_init('http://foo/bar.html');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');

var_dump(curl_exec($ch));

In fact he tried it and told me it doesn't work, while this does:

$ch = curl_init('http://foo/bar.html');

//curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');

ob_start();
curl_exec($ch);
var_dump(ob_get_clean());


phpinfo() tels me that I'm running:
libcurl/7.10.5 OpenSSL/0.9.7b zlib/1.1.4

I've also seen bug #15279, but it was marked as documentation problem, and didn't explain this weird issue.


Reproduce code:
---------------
$ch = curl_init('http://beccati.com/img/adv.png');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');

var_dump(curl_exec($ch));

Expected result:
----------------
string(214) "HTTP/1.1 200 OK
Date: Sat, 21 Feb 2004 07:39:06 GMT
Server: Apache
Last-Modified: Wed, 06 Aug 2003 12:35:16 GMT
ETag: "27c64-204-3f30f604"
Accept-Ranges: bytes
Content-Length: 516
Content-Type: image/png

"

Actual result:
--------------
bool(false)

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-02-21 02:57 UTC] sniper@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. 

Thank you for your interest in PHP.

Not PHP bug (if it even is a bug which I doubt).
Ask the curl author(s).

 [2004-02-21 04:10 UTC] matteo at beccati dot com
> Ask the curl author(s).

Done.
http://sourceforge.net/tracker/index.php?func=detail&aid=901648&group_id=976&atid=100976

> Not PHP bug (if it even is a bug which I doubt).

You're probabiliy correct saying that it's not a PHP bug, but it really seems a wrong cURL behaviour to me.
When setting CURLOPT_RETURNTRANSFER I'm asking curl_exec to return the result instead that outputting it, but result isn't returned, neither printed out.

Thank you for your help.
 [2004-02-21 08:30 UTC] daniel at haxx dot se
I beg to differ.

CURLOPT_RETURNTRANSFER is not an option that libcurl provides, it is an option that the PHP/CURL layer has invented and uses. 

Thus, we cannot fix this in the curl project. It is not a curl bug!
 [2004-02-21 12:19 UTC] iliaa@php.net
Works just fine with latest CVS. 
<?php 
$ch = curl_init('http://bugs.php.net/'); 
 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); 
 
var_dump(curl_exec($ch)); 
?> 
 
Results in: 
 
tring(154) "HTTP/1.1 200 OK 
Date: Sat, 21 Feb 2004 17:19:33 GMT 
Server: Apache/1.3.28 (Unix) PHP/4.3.4-dev 
X-Powered-By: PHP/4.3.4-dev 
Content-Type: text/html 
 
" 
 
 [2004-02-23 14:08 UTC] matteo at beccati dot com
Just downloaded the latest win32 snapshot (STABLE-200402231730), and tried the code with http://bugs.php.net/ (which is a PHP script) and an image file (http://bugs.php.net/gifs/logo-bug.gif).

The issue still exists when doing HEAD requests to static files.
 [2004-02-23 14:37 UTC] sniper@php.net
When you run the script, it hangs a while here:
curl.c:1021      error = curl_easy_perform(ch->cp);

And finally it returns:
  CURLE_PARTIAL_FILE

The error string it gives is: "transfer closed with 6484 bytes remaining to read"

Test script:

<?php 
$ch = curl_init('http://bugs.php.net/gifs/logo-bug.gif'); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); 
var_dump(curl_exec($ch)); 
?>

(notice: not using CURLOPT_RETURNTRANSFER :)

 [2004-02-23 14:43 UTC] iliaa@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 [2004-02-23 17:08 UTC] matteo at beccati dot com
Downloaded the latest snap: I can confirm that the bug was fixed.

Great work :)
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 12 18:01:26 2024 UTC