2012-01-08 73 views
0

我在page1.php中有一個表單,它們都重定向到page3.php,並且還觸發page2.php中的ajax post(沒有成功函數),page2.php可能需要運行一個小時,但用戶不需要結果。我確實需要用戶看到page2.php,但他可能會離開。使用ignore_user_abort和set_time_limit(0)

我需要在page2.php中使用這兩個函數嗎?或者只是其中的一個?或者沒有?我想確保page2.php中的腳本運行到結束。

page1.php中

<form id="form" action="page2.php" method="post"> 
      <!--form input elements with names--> 
    </form> 
    <script> 
      $('#form').submit(function() { 
       $.post('page3.php', { 
        var1: $('input[name="name1"]').val(), 
        var2: $('input[name="name2"]').val(), 
       });         
      }); 
    </script> 

使page2.php

<?php 
      ignore_user_abort(true); // Allow user to navigate away 
      set_time_limit(0);  // Allow script to run indefinitely 
      // a lot of code which will run for a while - between 3 minutes and an hour 
    ?> 

Page3.php

<html> 
      <!--some code here including links to go to page4.php--> 
    </html> 

我問部分是因爲我覺得沒有必要對任何這些功能,但被告知使用它們,但是當我嘗試使用它們時,儘管有die();和腳本st ops,它似乎仍在處理某些事情,我害怕因爲這個「無限期」而在服務器上太多了。 因爲我不想添加不必要的負載。

回答

0

是的,你需要這兩個函數才能完成你當前的標準,我的建議是將其移出http協議。根據您的腳本實際完成的內容,如果它不需要客戶端的進一步交互,最好在命令行中使用它。

一個使用理論是創建一個cron腳本,在需要的時間間隔被調用,然後它將訪問一個page2.php將填充的隊列。

如果有可用隊列,cron腳本將處理信息,因爲它當前在page2.php上完成。由於腳本運行很長一段時間,我建議使用cron的鎖定機制,請參閱php.net/flock獲取簡單的文件系統鎖。你檢查文件是否鎖定它已經運行。

下面是一個簡單的例子,你通過cron放進一個獨立的腳本處理:

$fp = fopen(DATA_PATH . '/locks/isLocked', 'w+'); 

     if (!flock($fp, LOCK_EX | LOCK_NB)) { //locks the file 
      $logger->info('Already Running'); 
      exit(0); 
     } 

     fwrite($fp, time()); //write our new time so we can inspect when it ran last if needed 

     try { 
      if (hasQueue()) { //checks to see if any jobs are waiting in mysql 
       run(); //process normally completed by page2.php 
      } 
     } catch (Exception $e) { 
      //something went wrong here could setup a log/email yourself etc.. 
     } 

     flock($fp, LOCK_UN); //unlock the file 
+0

哦哇,這是大家很新的給我,你能不能告訴我一些鏈接/文件? – 2012-01-08 20:22:36

+0

試試[this](http://tinyurl.com/75r8y5f)網站。 – jmkeyes 2012-01-08 21:07:24

+0

更新了簡單的文件鎖定示例,以瞭解如何通過cron和mysql設置php腳本,以最好地檢查相應控制面板的文檔以及使用mysql的php.net/mysql – 2012-01-09 17:06:02

相關問題