PHP-сокет - неправильная длина результата - дополнительные символы - PullRequest
0 голосов
/ 04 марта 2012

Я использую следующую функцию:

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 Ответ

1 голос
/ 04 марта 2012

В вашем коде есть несколько ошибок:

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