2014-03-31 58 views
0

我有一個while循環,它從文本文件中獲取ip和密碼,並登錄到使用HTTP Auth租用的某些服務器。PHP - while循環加載

<?php 

$username = 'admin'; 


function login($server, $login){ 

global $username, $password, $server; 

$options = array(

    CURLOPT_URL => $server, 
    CURLOPT_HEADER => 1, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_USERAGENT => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5", 
    CURLOPT_HTTPHEADER => array(" 
    Host: {$server} 
    User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0 
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
    Accept-Language: en-US,en;q=0.5 
    Accept-Encoding: gzip, deflate 
    Connection: keep-alive 
    Authorization: Basic {$login} 

")); 

$ch = curl_init(); 
curl_setopt_array($ch, $options); 
$result = curl_exec($ch); 
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
if ($http_status == 200) { 
//do something 
echo "Completed"; 

} 
else { echo "Something went wrong";} 

}; 

$file = fopen('myServers.txt', 'r'); 


while (! feof($file)) { 
$m = explode(fgets($file), ':'); 
$password = $m[0]; 
$server = $m[1]; 
$login = base64_encode("{$username}:{$password}"); 
login($server, $login); 
}; 




?> 

該腳本工作正常。但是,當我在本地主機上加載頁面時,需要永久加載,然後在完成整個文件時立即打印所有內容。

我想在每次執行文件時打印出Something went wrongcompleted,我不希望它等待整個文件通過循環。

+0

你可以在while循環中'echo'一些東西嗎? – muttley91

+0

作爲@rar,建議,你可以'回聲'的東西,因爲你正在循環的項目。如果你想在解析這些項​​目時與頁面進行交互,你唯一的選擇就是加載頁面,然後做一個'ajax'調用來解析這些項​​目 – mituw16

+0

問題是web服務器在發送之前完成腳本的完成整個輸出到客戶端。這只是它的工作方式。如果您希望交互式或至少定期迴應,請使用AJAX。 –

回答

2

您可能會想看看PHP刷新功能,它會在繼續創建更多頁面內容之前將內容推送到瀏覽器。請注意,根據我對PHP的記憶,您需要同時使用ob_flush()和flush()以正確地將內容刷新到瀏覽器。

http://us3.php.net/flush

[編輯]

例如:你可以嘗試改變你的迴音語句類似的東西在下面:

echo "Completed"; 
ob_flush(); 
flush(); 
+0

我會看看這個謝謝 – user3196332

1

無論你可以做你想做的事情依賴於正在使用的Web服務器,以及它如何配置,關於輸出緩衝

開始閱讀的好地方是PHP的flush函數的文檔。

flush的調用旨在將輸出推送給最終用戶 - 但有時Web服務器實現它自己的輸出緩衝,這會影響效果。

flush文檔:

幾臺服務器,特別是在Win32中,仍然會緩存腳本的輸出,直到它的結果發送到瀏覽器之前終止。