php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #36604 get_headers
Submitted: 2006-03-03 13:09 UTC Modified: 2006-03-04 01:48 UTC
From: chentie at livedoor dot cn Assigned:
Status: Closed Package: *URL Functions
PHP Version: 5.1.2 OS: freebsd 5
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: chentie at livedoor dot cn
New email:
PHP Version: OS:

 

 [2006-03-03 13:09 UTC] chentie at livedoor dot cn
Description:
------------
get_headers("http://bugs.php.net/welcometochina.php")

the result is like this:
Warning: get_headers (http://bugs.php.net/welcometochina.php): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

but i think it should be like this:
HTTP/1.1 404 Not Found
Content-Length: 1635
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Fri, 03 Mar 2006 11:30:47 GMT
Connection: close

and other http status code such as 403

i hate to touch you in others method,here is my code for that problem:

   function get_headers($url,$format=0) {
       $url=parse_url($url);
       if (empty($url["path"])) {
       	   $url["path"]="/";
       }
       print_r($url);
       $end = "\r\n\r\n";
       $fp = fsockopen($url['host'], (empty($url['port'])?80:$url['port']), $errno, $errstr, 30);
       if ($fp) {
           $out  = "GET {$url["path"]} HTTP/1.1\r\n";
           $out .= "Host: ".$url['host']."\r\n";
           $out .= "Connection: Close\r\n\r\n";
           $var  = '';
           fwrite($fp, $out);
           while (!feof($fp)) {
               $var.=fgets($fp, 1280);
               if(strpos($var,$end))
                   break;
           }
           print $var; 
           fclose($fp);

           $var=preg_replace("/\r\n\r\n.*\$/",'',$var);
           $var=explode("\r\n",$var);
           if($format) {
               foreach($var as $i) {
                   if(preg_match('/^([a-zA-Z -]+): +(.*)$/',$i,$parts))
                       $v[$parts[1]]=$parts[2];
               }
               return $v;
           }
           else
               return $var;
       }
   }

here i didn't conside the loction of code 301,because i think 
it's not the true URI ,just return the 301 response is OK 

at last, sorry for my english,welcome to china 2008! ;-p  


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-03-03 13:23 UTC] chentie at livedoor dot cn
conside => consider
 [2006-03-03 16:18 UTC] mike@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php5.1-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.1-win32-latest.zip


 [2006-03-04 01:48 UTC] bjori@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.

Has been fixed in CVS for a while now.
http://cvs.php.net/viewcvs.cgi/php-src/ext/standard/http_fopen_wrapper.c?r1=1.99.2.8&r2=1.99.2.9&diff_format=u
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Fri May 09 09:01:26 2025 UTC