我正在使用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 ......所以,它无法读取分块的主体和内容。