PHP socket_recv()不接收来自服务器的整个响应。

时间:2013-05-02 14:35:33

标签: php sockets

我尝试使用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;
 }

1 个答案:

答案 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