PHP pfsockopen - fread()有时会返回一个空字符串或返回少于5个字节的字符串

时间:2017-04-19 10:45:47

标签: php fread

我正在使用pfsockopen在php中打开持久性互联网,并使用fread()来读取返回值。大多数时候它工作正常,但有时(1 / 100,000)fread()返回空字符串或返回少于5个字节的字符串,并且Transfer-Encoding被分块。这是我使用的主要代码:

$s_pack = self::buildRequestBody($host, $uri, $headers, $body, $method);
$fp = pfsockopen($ip, $port, $i_err, $s_err, $timeout);

stream_set_timeout($fp, $timeout);

$write_status = fwrite($fp, $s_pack);
$status = stream_get_meta_data($fp);

$s_resp = '';
while (!feof($fp) && !$status['timed_out']) {
    $buffer = fread($fp, 51200);
    $s_resp .= $buffer;
    $status = stream_get_meta_data($fp);

    // read chunked body
    // read content 
}
var_dump(strlen($s_resp));

有时结果打印属性,但有时strlen($ s_resp)等于0,或1,或2,或3 ......所以,它无法读取分块的主体和内容。

the one screenshot for error log:

0 个答案:

没有答案