2011-07-08 100 views
1

我試圖在頁面發送到瀏覽器後調用函數,但我還沒有找到這樣做的方法。如何在頁面加載完成後調用函數

我已經嘗試register_shutdown_function和__destruct,但它不起作用。

這是我的結構:

register_shutdown_function('MyClass::Save'); 
MyClass::Initialize(); 
CreateAllOutput(); 

MyClass的::保存具有休眠(20)內。

在CreateAllOutput()之後調用shutdown函數,但事實是,瀏覽器上的加載欄只在Save函數執行後完成,等待20秒...我試着使用非靜態類和__destruct裏面有一個睡眠(20),發生同樣的情況。

有沒有辦法讓函數只在輸出全部發送到瀏覽器後執行?

預先感謝您。

回答

2

通常:。除了刷新所有輸出並調用它之外,沒有其他可能,但瀏覽器中的加載欄也不會完成。

我能想到的唯一方法就是將一個iFrame放入頁面以調用具有保存功能的PHP文件。或者你可以做一個Ajax調用。

第三種可能性是致電exec()Documentation)。使php文件可執行後,您可以使用該方法運行它。如文檔中提到:如果程序開始使用此 功能,以便它繼續 在後臺運行

,該程序的輸出 必須被重定向到一個 文件或其他輸出流。如果這樣做失敗 將導致PHP掛起,直到 程序的執行結束。

+0

直到現在我其實並沒有要求這樣的功能,但這似乎是一個主要限制。我只是想讓一個函數在用戶不需要等待的情況下運行,因爲他們會期望頁面完成加載,只是爲了查看沒有添加到輸出中......令人失望...... – BlunT

+0

@BlunT - 我在回答中添加了另一個可能的解決方案 –

+0

我已經想過要執行exec,但它看起來太多開銷,而且我甚至不知道我能做到這一點,因爲我處於共享主機環境。我希望能找到一個簡單而直接的解決方案,我可能錯過了谷歌,但到目前爲止似乎並不如此。 – BlunT

相關問題