Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SSL时PHP fread挂起_Php_Fsockopen_Openvas - Fatal编程技术网

使用SSL时PHP fread挂起

使用SSL时PHP fread挂起,php,fsockopen,openvas,Php,Fsockopen,Openvas,我正在使用fsockopen连接到OpenVAS管理器并发送XML。我使用的代码是: $connection = fsockopen('ssl://'.$server_data['host'], $server_data['port']); stream_set_timeout($connection, 5); fwrite($connection, $xml); while ($chunk = fread($connection, 2048)) { $response .= $chu

我正在使用
fsockopen
连接到OpenVAS管理器并发送XML。我使用的代码是:

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

while ($chunk = fread($connection, 2048)) {
    $response .= $chunk;
}
然而,在读取前两个数据块后,PHP挂起在fread上,在5秒钟后不会超时。我尝试过使用
stream\u get\u contents
,这会给出相同的结果,但是如果我只使用一个fread,它就可以正常工作,只是我想阅读所有内容,不管长度如何


我猜,这是OpenVAS的一个问题,它并没有像PHP所期望的那样结束流,但这是一个未知数。如何读取数据流?

我认为fread正在挂断,因为在最后一个数据块上,它期望2048字节的信息,并且可能会得到更少的信息,所以它会等到超时

您可以尝试如下方式重构代码:

$bytes_to_read = 2048;
while ($chunk = fread($connection, $bytes_to_read)) {
  $response .= $chunk;
  $status = socket_get_status ($connection);
  $bytes_to_read = $status["unread_bytes"];
}
这样,你就可以把所有的东西分成两部分来阅读。。。。我还没有测试过这段代码,但我记得不久前有一个类似的问题,并用类似的东西修复了它


希望有帮助

我认为fread挂断了,因为在最后一块上,它期望2048字节的信息,并且可能会得到更少的信息,所以它会等到超时

您可以尝试如下方式重构代码:

$bytes_to_read = 2048;
while ($chunk = fread($connection, $bytes_to_read)) {
  $response .= $chunk;
  $status = socket_get_status ($connection);
  $bytes_to_read = $status["unread_bytes"];
}
这样,你就可以把所有的东西分成两部分来阅读。。。。我还没有测试过这段代码,但我记得不久前有一个类似的问题,并用类似的东西修复了它

希望有帮助