0

我编写了一个 PHP 脚本来使用 APNS 推送通知。我添加了一个 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 回答