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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: matteo at beccati dot com
New email:
PHP Version: OS:

 

 [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: Wed Nov 27 04:01:27 2024 UTC