0

APNSを使用して通知をプッシュするPHPスクリプトを作成しました。プッシュされたユーザーの数を監視するために、PHPプログレスバーを追加しました。進行状況バーがPHPページに表示されます。また、MySOLデータベースを更新して番号を記録しています。このスクリプトは非常に長い時間実行されると予想されます。約3時間実行した後、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
4

2 に答える 2

1

httpd.confのapacheの設定が原因で、ページの表示が停止した可能性があります

KeepAliveTimeout 300

php.iniのプロパティmax_execution_timeにより、PHPはまだ実行されています

于 2011-10-14T18:40:09.067 に答える
0

mysql_error 関数をまったく呼び出していないことに注意してください。次の行を置き換えます。

echo "pushlog テーブル更新エラー: ".mysql_error."
";

これで:

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

さらに、あなたがしていることは非常に悪い習慣です。アップデーターを作成し、セッションに位置を維持し、ページを更新/更新して、実行を中断したところから続行してください。.htaccess に tim_out の制限がない場合は、何の意味もありません。また、時間制限を設定しない場合もあります。

最初にページを更新してみて、それが役立つかどうかを確認してください。そのためにhtmlメタタグを使用できます。また:

header('Location: thispage.php');

そして、プログラムの各ステップをリクエストにします。

于 2011-10-14T21:49:56.967 に答える