PHP代理服务器和调用JSON代码问题


PHP Proxy Server and Calling JSON Code Problem?

从这个问题开始,我将使用其中一个答案中提供的代码。

代码如下:

<!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标签

之前完成所有的php代码