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

时间:2011-08-13 20:05:24

标签: php html json proxy

this question开始,我正在使用其中一个答案中提供的代码。

以下是代码:

<!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 \ vhosts \ allencoded.com \ httpdocs \ test.php:12)in   第88行的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php警告:   无法修改标头信息 - 已经发送的标头(输出   从C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php:12)开始   第88行的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php警告:   无法修改标头信息 - 已经发送的标头(输出   从C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php:12)开始   第88行的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php警告:   无法修改标头信息 - 已经发送的标头(输出   从C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php:12)开始   第88行的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php警告:   无法修改标头信息 - 已经发送的标头(输出   从C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php:12)开始   第88行的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php警告:   无法修改标头信息 - 已经发送的标头(输出   从C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php:12)开始   第88行的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php警告:   无法修改标头信息 - 已经发送的标头(输出   从C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php:12)开始   第88行的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php警告:   无法修改标头信息 - 已经发送的标头(输出   从C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php:12)开始   第88行的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php警告:   无法修改标头信息 - 已经发送的标头(输出   从C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php:12)开始   第88行HTTP / 1.1上的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php   404 Not Found Server:Apache Content-Type:text / html;   charset = iso-8859-1内容编码:gzip内容长度:224   缓存控制:max-age = 7146到期:2011年8月13日星期六22:12:11 GMT   日期:星期六,2011年8月13日20:13:05 GMT连接:keep-alive Vary:   接受编码X-Akamai-Edgescape:country_code = US

1 个答案:

答案 0 :(得分:0)

在调用header之前,你无法回应任何内容,所以在你的情况下它是你打开php标签之前的所有内容。

您最好的选择是在开始html标记之前完成所有的PHP