2010-09-10 134 views

回答

2

PHP是一種服務器端技術。除非您使用JavaScript將消息發送到PHP腳本,否則不知道該頁面正在關閉。然後它就像任何其他的PHP頁面一樣。

+0

嗯.........這是我必須嘗試的..我不得不去嘗試 – X10nD 2010-09-10 18:43:56

+0

偉大...工作................ – X10nD 2010-09-10 19:18:28

4

PHP是服務器端,這樣的時候你的用戶看到的頁面,PHP的線程已經完成。當然你可以在你的javascript卸載中加入一個ajax調用,儘管它調用了一個PHP腳本。

+0

或者我可以使用JavaScript,但是,我必須重新編碼PHP的某些部分到JS – X10nD 2010-09-10 18:42:14

+1

您不必用這種方法重新編碼任何東西,PHP腳本仍然被調用。 – Robert 2010-09-10 18:43:00

-1

PHP不是面向事件的,知道頁面是否完成的最好方法是在最後一行。

如果你需要知道當一個類被「卸載」,您可以使用該功能__destroy

+0

這將用於會話destory – X10nD 2010-09-10 18:41:32

+0

如果您手動銷燬會話,您可以在調用該函數後立即編寫代碼。但是,當會話被銷燬時,PHP沒有辦法調用函數,因爲它取決於很多因素,比如cookie過期,手動清除cookie等。 – 2010-09-10 18:44:43

+1

您是否想過__destruct()? – DexterW 2010-09-10 20:56:22

0

由於PHP是一個服務器端語言是不可能做這樣的事情,而不使用某種形式的基於瀏覽器的腳本語言。

2

如果你想在你的請求結束時執行的東西,你可以使用register_shutdown_function

function my_func() { 
    // perform some cleanup 
}  

// my_func will be called after the rest of your script has executed 
register_shutdown_function('my_func'); 
+0

+ 1擊敗我10秒。刪除我的。 – webbiedave 2010-09-10 18:45:08

+0

@webbiedave我重新讀了這個問題,我不認爲這個答案是相關的。 – meagar 2010-09-10 18:46:42

+0

假設我關閉頁面或從特定頁面移動 – X10nD 2010-09-10 18:51:35

0

簡短的回答NO!

這樣做的原因是PHP只是創建一個頁面,它創建了一個頁面,它將該頁面發送給Apache服務,完成後,PHP腳本已經完成。

可能的黑客正在使用javascript。

因此,繼承人和示例,要求jQuery¬

$.fn.unloadping = function(url,params,callback) 
{ 
    this.onbeforeunload = function() 
    { 
     $.ajax({ 
      type : 'GET', 
      data : params, 
      success : function(response) 
      { 
       callback(this) //Send window context back 
      } 
     }); 
     return false; 
    } 
    return $(this); //keep the chain 
} 

,並可以使用像這樣

$(window).unloadping('/ping/closewindow.php',{page:window.location.href},function(context){ 
    this.close(); //Needs to be checked 
}); 

我可以問你爲什麼要這麼做?你的動機是什麼等等?