PHP套接字 - 错误的结果长度 - 其他字符

时间:2012-03-04 12:09:03

标签: php string sockets

我正在使用以下功能:

function createSocket($host, $script, $request, $method="POST", $port="8080") {
    $request_length = strlen($request);
    $output="";
    $script .= "?$request";
    //echo  "host=".Middle_Tier;

    $header = "$method $script HTTP/1.1\r\n";
    $header .= "Host: $host\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: $request_length\r\n";
    $header .= "Connection: close\r\n\r\n";
    $header .= "$request\r\n";

    $socket = fsockopen($host, $port, $errno, $errstr);

    if ($socket) //if its open, then...
    {
    fputs($socket, $header); // send the details over
    while(!feof($socket)) {
        $output[] = fgets($socket); //get the results
    }
    return $output;
    fclose($socket);
    }
    else {
    return false;
    }
}

$host    = 'my host';
$script  = 'path/to/my/function';
$request = "phone=$phone&city_id=$city_id";

$arr = createSocket($host, $script, $request, $method="POST", $port="8080");

我从目的地获得此结果:

$arr[9] = unavailable

当我打印时:

strlen($arr[9]); 

输出 14 (即3个附加字符)

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。

  1. 您正在使用HTTP/1.1而不处理chunked encoding如果您不需要/想要任何花哨的HTTP 1.1功能,请改用HTTP / 1.0。
  2. 您希望在回复的第9行发送某些信息。如果HTTP响应标头的顺序发生变化(比如因为引入了另一个标头)会怎么样?你没有考虑到这一点。结果:您的代码可能在任何给定时间中断。
  3. 为什么不将curl用于“举重”?