2

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

1 回答 1

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

于 2013-05-02T20:11:35.877 回答