2009-10-22 193 views
2

有沒有辦法在php中顯示進度條?我喜歡讓用戶知道php腳本在做什麼。php進度條?

下面是從我的網站http://www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book

的結果,例如,我有一些文字,上面寫着靜態加載圖片「載入中...」,當頁面完全加載,我隱藏加載股利。我的PHP腳本出去亞馬遜API,易趣API和屏幕颳了幾個其他網站和,而不是靜態負載DIV我想更新加載分度以下

加載amazon.com

//進度亞馬遜,完成更新加載DIV

加載ebay.com

等等,等等

這是可能的嗎?如果是的話,最好的辦法是什麼?預先感謝您的幫助!

回答

3

使用AJAX問PHP目前正在做什麼,並有一個隊列系統來定義哪些任務完成或沒有完成。這裏是一個非常簡單的例子:

當任務開始時,使其設置下列變量:

$_SESSION['isEbayLoaded'] = false; 
$_SESSION['isAmazonLoaded'] = false; 

一旦PHP負載易趣,也將有助於isEbayLoaded爲true,然後AJAX可以簡單地問PHP如果易趣載入了,然後亞馬遜,然後無論你需要什麼。所有PHP所要做的就是檢查這些變量是否設置爲true,這意味着任務已經完成。

+0

是否可以從主頁面訪問會話變量而無需重新加載該頁面?這是你可能想要考慮的事情。 –

+0

會話變量正在被通過AJAX調用的頁面讀取,因此它們在主腳本中設置,它們應該在設置後可用於請求。否則,仍然可以使用臨時文件或數據庫來存儲信息,然後在AJAX請求發出時讀取這些信息。爲了避免調用PHP,甚至可以將文件存儲爲.json,然後使用JavaScript來請求文件並處理有關完成哪些任務和哪些任務不完成的信息。 –

0

最好的方法是讓你的javascript對服務器進行ajax調用並找出它在哪裏,這樣你就可以給用戶一些反饋。

您可以先開始上傳進度條,然後繼續顯示應用程序的進度。

1

我已經完成了這個有一個非常簡單的解決方案之前:

ob_flush(); 

它所需要的是創建具有適當的類名一個DIV:

<div class="loading"> 
    Loading... 
</div> 

然後,我的PHP基本上是:

foreach ($sites as $site) { 
    printAndFlush(<<<CSS 
    <style> 
     div.loading { 
     background: url($site.png) no-repeat right center; 
     } 
    </style> 
CSS; 

    scrapeSite($site); 
} 

這將使用背景風格來顯示您將要刮的網站。

如果您必須使用標記,您可以每次(具有唯一標識)只需打印一個新的「加載」div,以及將前一個div的樣式設置爲「display:none」的樣式。

當然,請記住,某些瀏覽器在呈現任何內容之前至少需要1024個字節(somethings 4k!)。

+0

小細節,但您從不關閉PrintAndFlush函數中的圓括號。另外,我沒有看到任何理由不止一次地打印樣式標籤。 –

+0

不是一個實際的功能,只是一個僞php功能。 風格標籤不止一次打印的原因是由瀏覽器強制編譯,因爲每個