2011-09-21 31 views
1

我使用fsockopen連接到OpenVAS管理器併發送XML。我使用的代碼是:使用SSL時PHP fread掛起

$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_get_contents,它給出了相同的結果,但如果我只使用一個fread,它可以正常工作,只是我想要讀取所有內容,而不考慮長度。

我在猜測,這是OpenVAS的一個問題,它不會像PHP期望的那樣結束流,但這是在黑暗中拍攝的。我如何閱讀流?

回答

4

我相信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"]; 
} 

這樣的話,你會兩個塊讀到的一切....我沒有測試此代碼,但我記得有一個類似的問題前一陣子,並用這樣的東西修復它。

希望它有幫助!

+0

謝謝,它的工作 – Fluffy