使用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"];
}
这样,你就可以把所有的东西分成两部分来阅读。。。。我还没有测试过这段代码,但我记得不久前有一个类似的问题,并用类似的东西修复了它
希望有帮助