2012-03-04 69 views
-1

我使用下面的函数:PHP插座 - 错误的结果长度 - 其他字符

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]); 

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

+0

请出示print_r的输出($ ARR) – abresas 2012-03-04 12:12:37

+1

使用'var_dump'看到变量的实际内容。 'var_dump'也输出长度。不要使用print_r。例如'var_dump(“unavailable”)'输出'string'unavailable'(length = 13)'。 'print_r(“unavailable”);'只输出字符串和两个空格,而不提供任何进一步的信息。 – Basti 2012-03-04 12:14:13

+0

使用的var_dump我得到: [9] =>串(5) “不可用” 为什么当我打印$常用3 [9]放出来只有: 不可用 ???? – Mahmoudco 2012-03-04 12:19:58

回答

1

你的代码有几个错误。

    你使用 HTTP/1.1没有处理 chunked encoding如果您不需要
  1. /希望任何花哨的HTTP 1.1功能,使用HTTP/1.0来代替。
  2. 您希望在响应的第9行发送某些信息。如果HTTP响应头的顺序发生变化(说是因为引入了另一个头)会怎么样?你不解释这一点。结果:您的代码可能在任何给定时间中断。
  3. 为什么不使用curl作为“繁重”?
+0

通过使用var_dump我得到: [9] =>字符串(5)“不可用” 为什么当我打印$ arr [9]输出只是:不可用???? 我如何让自己的条件? – Mahmoudco 2012-03-04 12:37:50