开发者

PHP fread hangs when using SSL

开发者 https://www.devze.com 2023-04-06 05:25 出处:网络
I\'m using fsockopen to connect to an OpenVAS manager and send XML. The code I am using is: $connection = fsockopen(\'ssl://\'.$server_data[\'host\'], $server_data[\'port\']);

I'm using fsockopen to connect to an OpenVAS manager and send XML. The code I am using is:

$connection = fsockopen('ssl://'.$server_data['host'], $server_data['port']);
stream_set_timeout($connection, 5);
fwrite($connection, $xml);

while ($chunk = fread($connection, 2048)) {
    $response .= $chunk;
}

However after reading the first two chunks of data, PHP hangs on fread and doesn't time out after 5 seconds. I have tried using stream_get_contents, which gives the same result, BUT if I only use one fread, it works ok, just that I want to read everything, regardless of l开发者_C百科ength.

I am guessing, it is an issue with OpenVAS, which doesn't end the stream the way PHP expects it to, but that's a shot in the dark. How do I read the stream?


I believe that fread is hanging up because on that last chunk, it is expecting 2048 bytes of information and is probably getting less that that, so it waits until it times out.

You could try to refactor your code like this:

$bytes_to_read = 2048;
while ($chunk = fread($connection, $bytes_to_read)) {
  $response .= $chunk;
  $status = socket_get_status ($connection);
  $bytes_to_read = $status["unread_bytes"];
}

That way, you'll read everything in two chunks.... I haven't tested this code, but I remember having a similar issue a while ago and fixing it with something like this.

Hope it helps!

0

精彩评论

暂无评论...
验证码 换一张
取 消