从这个问题开始,我将使用其中一个答案中提供的代码。
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
$server_url = "http://www.nfl.com/liveupdate/scorestrip/ss.json";
$options = array
(
CURLOPT_HEADER => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_CONNECTTIMEOUT => 0,
CURLOPT_HTTPGET => 1
);
$service = $_GET["service"];
$request_headers = Array();
foreach($_SERVER as $i=>$val) {
if (strpos($i, 'HTTP_') === 0) {
$name = str_replace(array('HTTP_', '_'), array('', '-'), $i);
if ($name != 'HOST')
{
$request_headers[] = "{$name}: {$val}";
}
}
}
$options[CURLOPT_HTTPHEADER] = $request_headers;
switch (strtolower($_SERVER["REQUEST_METHOD"]))
{
case "post":
$options[CURLOPT_POST] = true;
$url = "{$server_url}/services/".$service;
$options[CURLOPT_POSTFIELDS] = file_get_contents("php://input");
break;
case "get":
unset($_GET["service"]);
$querystring = "";
$first = true;
foreach ($_GET as $key => $val)
{
if (!$first) $querystring .= "&";
$querystring .= $key."=".$val;
$first = false;
}
$url = "{$server_url}/services/".$service."?".$querystring;
break;
default:
throw new Exception("Unsupported request method.");
break;
}
$options[CURLOPT_URL] = $url;
$curl_handle = curl_init();
curl_setopt_array($curl_handle,$options);
$server_output = curl_exec($curl_handle);
curl_close($curl_handle);
$response = explode("'r'n'r'n",$server_output);
$headers = explode("'r'n",$response[0]);
foreach ($headers as $header)
{
if ( !preg_match(';^transfer-encoding:;ui', Trim($header)) )
{
header($header);
}
}
echo $response[1];
?>
</body>
</html>
不幸的是,我得到以下错误,为什么会这样?:
警告:无法修改报头信息-报头已由(输出开始于C: ' inetpub ' vhost ' allencoded.com ' httpdocs ' test.php: 12)C:'inetpub'vhosts'allencoded.com'httpdocs'test.php on line 88无法修改报头信息-报头已由(输出)发送从C:'inetpub'vhosts'allencoded.com'httpdocs'test.php:12开始C:'inetpub'vhosts'allencoded.com'httpdocs'test.php on line 88无法修改报头信息-报头已由(输出)发送从C:'inetpub'vhosts'allencoded.com'httpdocs'test.php:12开始C:'inetpub'vhosts'allencoded.com'httpdocs'test.php on line 88无法修改报头信息-报头已由(输出)发送从C:'inetpub'vhosts'allencoded.com'httpdocs'test.php:12开始C:'inetpub'vhosts'allencoded.com'httpdocs'test.php on line 88无法修改报头信息-报头已由(输出)发送从C:'inetpub'vhosts'allencoded.com'httpdocs'test.php:12开始C:'inetpub'vhosts'allencoded.com'httpdocs'test.php on line 88无法修改报头信息-报头已由(输出)发送从C:'inetpub'vhosts'allencoded.com'httpdocs'test.php:12开始C:'inetpub'vhosts'allencoded.com'httpdocs'test.php on line 88无法修改报头信息-报头已由(输出)发送从C:'inetpub'vhosts'allencoded.com'httpdocs'test.php:12开始C:'inetpub'vhosts'allencoded.com'httpdocs'test.php on line 88无法修改报头信息-报头已由(输出)发送从C:'inetpub'vhosts'allencoded.com'httpdocs'test.php:12开始C:'inetpub'vhosts'allencoded.com'httpdocs'test.php on line 88无法修改报头信息-报头已由(输出)发送从C:'inetpub'vhosts'allencoded.com'httpdocs'test.php:12开始C:'inetpub'vhosts'allencoded.com'httpdocs'test.php line 88 HTTP/1.1Server: Apache Content-Type: text/html;charset=iso-8859-1 Content-Encoding: gzip Content-Length: 224Cache-Control: max-age=7146 Expires: Sat, 13 Aug 2011 22:12:11 GMT日期:2011年8月13日(星期六)20:13:05 GMT连接:keep-aliveAccept-Encoding X-Akamai-Edgescape: country_code=US
你不能在调用header
之前回显任何内容,所以在你的例子中,它是在php开始标记之前的所有内容。
最好的办法是在打开html
标签