2012-03-04 3 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

+1

использовать 'var_dump', чтобы увидеть фактическое содержимое переменной. 'var_dump' также выводит длину. не используйте print_r, никогда. например 'var_dump (" unavailable ")' prints out 'string' unavailable '(length = 13) '. 'print_r (" unavailable ");' просто выводит строку и два пробела без дополнительной информации. – Basti

+0

С помощью var_dump я получаю: [9] => строка (5) "недоступен" почему, когда я печатаю $ обр [9] из положить только: недоступен ???? – Mahmoudco

ответ

1

В коде есть несколько ошибок.

  1. вы используете HTTP/1.1 без обработки chunked encoding Если вам не нужно/хочет какой-либо из причудливых особенностей HTTP 1.1, использовать HTTP/1.0 вместо.
  2. вы ожидаете, что определенную информацию отправят в 9-й строке ответа. Что делать, если порядок заголовков HTTP-ответов изменяется (скажем, потому, что был введен другой заголовок)? Вы этого не объясняете. Результат: ваш код может сломаться в любой момент времени.
  3. Почему бы не использовать curl для "тяжелой атлетики"?
+0

С помощью var_dump я получаю: [9] => строка (5) «недоступна» почему, когда я печатаю $ arr [9], выставляется только: недоступно ???? Как я делаю свои условия ?? – Mahmoudco

Смежные вопросы