关于php操作http header

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:19   1812   0

1、用 php 获取 http header 信息

<?php
$headers = getallheaders();
print_r($headers);
?>

2、用 php 生成 http header 信息

<?php
header
("Location: http://www.example.com/"); /* 重定向浏览器 */

/* 确保重定向后,后续代码不会被执行 */
exit;
?>
需要注意的是发送header前,不能先发送任何html信息,否则会出错。特别是,当我们用utf-8编辑php文件,然后存盘时在文件前面添加了引导字节时,也将被认为已有输出。

3、php 直接用 socket 来产生和读取相应的 http header 信息,参考例程如下:

引用自(http://www.bigbold.com/snippets/posts/show/1207

function remote_file_size ($url){
$head = "";
$url_p = parse_url($url);
$host = $url_p["host"];
if(!preg_match("/[0-9]*/.[0-9]*/.[0-9]*/.[0-9]*/",$host)){
// a domain name was given, not an IP
$ip=gethostbyname($host);
if(!preg_match("/[0-9]*/.[0-9]*/.[0-9]*/.[0-9]*/",$ip)){
//domain could not be resolved
return -1;
}
}
$port = intval($url_p["port"]);
if(!$port) $port=80;
$path = $url_p["path"];
//echo "Getting " . $host . ":" . $port . $path . " ...";

$fp = fsockopen($host, $port, $errno, $errstr, 20);
if(!$fp) {
return false;
} else {
fputs($fp, "HEAD " . $url . " HTTP/1.1/r/n");
fputs($fp, "HOST: " . $host . "/r/n");
fputs($fp, "User-Agent: http://www.example.com/my_application/r/n");
fputs($fp, "Connection: close/r/n/r/n");
$headers = "";
while (!feof($fp)) {
$headers .= fgets ($fp, 128);
}
}
fclose ($fp);
//echo $errno .": " . $errstr . "<br />";
$return = -2;
$arr_headers = explode("/n", $headers);
// echo "HTTP headers for <a href='" . $url . "'>..." . substr($url,strlen($url)-20). "</a>:";
// echo "<div class='http_headers'>";
foreach($arr_headers as $header) {
// if (trim($header)) echo trim($header) . "<br />";
$s1 = "HTTP/1.1";
$s2 = "Content-Length: ";
$s3 = "Location: ";
if(substr(strtolower ($header), 0, strlen($s1)) == strtolower($s1)) $status = substr($header, strlen($s1));
if(substr(strtolower ($header), 0, strlen($s2)) == strtolower($s2)) $size = substr($header, strlen($s2));
if(substr(strtolower ($header), 0, strlen($s3)) == strtolower($s3)) $newurl = substr($header, strlen($s3));
}
// echo "</div>";
if(intval($size) > 0) {
$return=intval($size);
} else {
$return=$status;
}
// echo intval($status) .": [" . $newurl . "]<br />";
if (intval($status)==302 && strlen($newurl) > 0) {
// 302 redirect: get HTTP HEAD of new URL
$return=remote_file_size($newurl);
}
return $return;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP