我尝试使用socket_recv接收HTTP响应。我的响应大于5000字节有问题。它停止接收;没有任何错误;大约7000字节,即使Content-Length明确表示响应远大于(25000字节)。我做错了什么或PHP套接字通常不稳定?
以下是代码的相关部分:
while((socket_recv($this->socket, $buf, 1024, MSG_WAITALL)) > 0){
$this->fullResponse .= $buf;
}
if(!$this->fullResponse){
$errno = socket_last_error();
$errmsg = socket_strerror($errno);
echo $this->state = "{$errno} {$errmsg}";
return;
}
答案 0 :(得分:1)
PHP套接字忽略Content-Length标头,因为它们位于HTTP响应部分,而套接字在较低级别工作。您是否尝试获取HTTP资源?为此,我将使用cURL:http://php.net/manual/en/book.curl.php,或者如果您只需要获取文件,请执行以下操作:file_get_contents(“http:// www.example.com/ somefile.ext”),但要工作allow_url_fopen必须是真正。 我也从php.net上的socket_recv评论部分找到了这个: http://www.php.net/manual/de/function.socket-recv.php#47789