2011-10-14 49 views
0

我編寫了一個PHP腳本來使用APNS推送通知。我添加了一個PHP進度條來監視已經推送了多少用戶。進度條顯示在PHP頁面中。我也不斷更新一個MySOL數據庫來記錄這個數字。預計該腳本將運行很長時間。運行約3小時後,PHP頁面(帶進度條)停止,但是當我檢查數據庫時,推送的用戶數量仍在增加。這意味着腳本仍在服務器內存中運行,但爲什麼頁面顯示停止?PHP腳本仍在服務器上運行,但網頁顯示已停止

這裏是一些代碼:

$count = 1; 
    while($row = mysql_fetch_array($result)) { 
     $pushToken = $row['pushToken']; 
     $result2 = mysql_query("SELECT COUNT(*) FROM deactivated_pushtokens WHERE pushToken LIKE '$pushToken'"); 
     list($token_deactivated) = mysql_fetch_row($result2); 

     if ($token_deactivated==0){ 
      if ($row['pushToken']!=""){ 
       if (strlen($row['pushToken']) == 64){//All valid push tokens will have a 32x2=64 length 
        //echo "<br>$count. Sending push to ".$row['deviceID']." Device token = ".$row['pushToken']; 
        //echo "<br><br>"; 

        if($count > $sendThreshold) 
        { 
         $pushMessage->sendMessage($row['pushToken'],$count,$appVersion,$mode,$message, $push_id); 
        } 



        if($count >= $push_update_count * $push_update_interval) 
        { 

         $pushlog_update = mysql_query("UPDATE pushlogs SET num_push_sent = '".$count."' WHERE push_id = '".$push_id."'"); 

         if(!$pushlog_update) 
         { 
//       echo "pushlog table update error: ".mysql_error."<br />"; 
         } 

/*      if($count<=$maxBar) // if failed again commment out and use block bleow 
         { 
          $prb->moveStep($count); 
         } 
*/      
         $push_update_count++; 

        } 

        if($count >= $update_progressbar_count * $update_progressbar_interval) 
        { 
         if($count<=$maxBar) 
         { 
          $prb->moveStep($count); 
         } 

         $update_progressbar_interval++; 
        } 

        $count++; 

        // move the Bar 
+0

你能顯示一些代碼嗎? – someone

回答

1

也許頁面顯示在httpd.conf停止由於配置Apache

KeepAliveTimeout 300 

PHP仍然在運行,由於在php.ini中的財產的max_execution_time

+0

嗨,我檢查了httpd.conf。沒有KeepAliveTimeout。你的意思是我應該添加這一行嗎?謝謝 – user955461

+0

順便說一下,我用「set_time_limit(600)」將php max_execution_time設置爲10分鐘。到目前爲止,php腳本運行了3個多小時,所以我想max_execution_time與腳本仍在運行無關。謝謝 – user955461

+0

BTW腳本在4小時後終止 – user955461

0

只是要注意,您根本不會調用mysql_error函數,而是替換行:

echo "pushlog table update error: ".mysql_error."
";

這一個:

echo "pushlog table update error: ".mysql_error()."<br />"; 

更進一步,你在做什麼是非常不好的做法。嘗試製作更新程序,讓您定位到會話中,然後更新/刷新頁面,並從您離開執行的地方繼續。如果您的.htaccess中沒有tim_out限制,則不表示任何內容。有時你可能沒有設定時間限制。

先嚐試刷新頁面,看看它是否可以幫助你。你可以使用一個html元標記。或者:

header('Location: thispage.php'); 

並使您的每一步都編入請求。

+0

或者您可以使用ajax。你的選擇。請參閱查找以某種方式將您的算法狀態保存在任何形式中的方法,您可以選擇任並使用超級全局$ _SESSION。 – khael

相關問題