To: leo at leoberkhout dot nl,
in PHP 5.0 get_headers() already exists so when i went through your code and organized it i had a small problem with that. Other than that when i changed the function name it worked fine. Of course i did tweak a few minor things to make it so. But this is what i've got.
<?php
function gimme_headers($host,$url) {
$headers = array();
$fp = fsockopen ($host,80,$errno,$errstr,45);
if($fp) {
fputs($fp,"GET $url HTTP/1.0\r\n\r\n");
while(!feof($fp)) {
$char = fgetc($fp);
if($char === "\n") {
if(ord($header) === 13) {
return($headers);
}
else {
array_push($headers,trim($header));
}
unset($header);
}
else {
$header = $header . $char;
}
}
fclose ($fp);
}
}
if(isset($_GET['uri'])) {
$uri = $_GET['uri'];
}
else {
$uri = 'php.net';
}
$array = gimme_headers($uri, "/");
print 'Cookie list for ' . $uri;
print '<ul>';
foreach ($array as $key => $value) {
print '<li>' . $_SERVER[$key] . ' = ' . $value . '</li>';
}
print '</ul>';
?>
headers_list
(PHP 5)
headers_list — Gibt eine Liste der gesendeten (oder zum Senden vorbereiteten) Response Header zurück
Beschreibung
array headers_list
( void
)
headers_list() gibt ein Array der Header zurück, die zum Browser/Client gesendet werden. Um festzustellen, ob diese Header bereits gesendet worden sind, verwenden Sie headers_sent().
Rückgabewerte
Gibt ein numerisch indeziertes Array der Header zurück.
Beispiele
Beispiel #1 Beispiele zur Verwendung von headers_list()
<?php
/* setcookie() fügt für sich einen eigenen Response Header ein */
setcookie('foo', 'bar');
/* Einen eigenen Response Header definieren
Dieser wird von den meisten Clients ignoriert */
header("X-Sample-Test: foo");
/* Specify plain text content in our response */
header('Content-type: text/plain');
/* Welche Header wurden gesendet? */
var_dump(headers_list());
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(4) {
[0]=>
string(23) "X-Powered-By: PHP/5.1.3"
[1]=>
string(19) "Set-Cookie: foo=bar"
[2]=>
string(18) "X-Sample-Test: foo"
[3]=>
string(24) "Content-type: text/plain"
}
Siehe auch
- headers_sent() - Prüft, ob oder wo die Header bereits gesendet wurden
- header() - Sendet einen HTTP-Header in Rohform
- setcookie() - Sendet ein Cookie
- apache_response_headers() - Liefert alle HTTP-Responseheader
headers_list
slick[ at ]iqlogin[ dot ]net
08-Apr-2008 04:52
08-Apr-2008 04:52
leo at leoberkhout dot nl
23-Oct-2006 08:40
23-Oct-2006 08:40
If I change in de above code "php.net" for antoher URL, de code doesn't work properly.
How can it be made in a way like this:
http://webtools.live2support.com/header.php
I spent a hole evening, but I found only a way to make the output more readable:
<?php
function get_headers($host, $url)
{
$headers = array();
$fp = fsockopen ($host, 80, $errno, $errstr, 45);
if ($fp)
{
fputs ($fp, "GET $url HTTP/1.0\r\n\r\n");
while (!feof($fp))
{
$char = fgetc($fp);
if($char === "\n")
{
if (ord($header) === 13) { return($headers); }
else { array_push($headers, trim($header)); }
unset($header);
}
else { $header = $header.$char; }
}
fclose ($fp);
}
}
$Array = get_headers("php.net", "/");
// print_r(get_headers("php.net", "/"));
echo "<P>\n";
foreach ($Array as $Key => $Value)
{
echo "<LI>\$_SERVER[\"$Key\"]=$Value\n";
if ($Key == 6)
$Cookie = $Value;
} # End of foreach ($_SERVER as $Key=>$Value)
echo "<P>\n";
echo "Cookie = $Cookie<BR>\n";
?>
Here I do a check with, for example, key 6, to seperated them from the other values, just for example.
My problem is that the code does not accept www.mysite.com or http://www.mysite.com
robertbienert at gmx dot net
27-Sep-2006 01:59
27-Sep-2006 01:59
Also note that Lukes code could be simplified if using the HTTP HEAD method, because it returns only the HTTP headers, not the whole resource.
Luke at Bonanomi dot com
02-Sep-2006 01:56
02-Sep-2006 01:56
I arrived here looking for a way to collect headers sent by a remote server. No such luck; so:
<?php
function get_headers($host, $url)
{
$headers = array();
$fp = fsockopen ($host, 80, $errno, $errstr, 45);
if ($fp)
{
fputs ($fp, "GET $url HTTP/1.0\r\n\r\n");
while (!feof($fp))
{
$char = fgetc($fp);
if($char === "\n")
{
if (ord($header) === 13) { return($headers); }
else { array_push($headers, trim($header)); }
unset($header);
}
else { $header = $header.$char; }
}
fclose ($fp);
}
}
?>
print_r(get_headers("php.net", "/"));
Array
(
[0] => HTTP/1.1 200 OK
[1] => Date: Sat, 02 Sep 2006 13:47:02 GMT
[2] => Server: Apache/1.3.37 (Unix) PHP/5.2.0-dev
[3] => X-Powered-By: PHP/5.2.0-dev
[4] => Last-Modified: Sat, 02 Sep 2006 13:21:09 GMT
[5] => Content-language: en
[6] => Set-Cookie: COUNTRY=USA%2C68.37.136.230; expires=Sat, 09-Sep-2006 13:47:02 GMT; path=/; domain=.php.net
[7] => Connection: close
[8] => Content-Type: text/html; charset=utf-8
)
