PHP-скрипт все еще работает на сервере, но отображение веб-страницы остановлено

Я написал 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

2 ответа

Возможно, отображение страницы остановлено из-за настройки apache в httpd.conf

KeepAliveTimeout 300

PHP все еще работает из-за свойства max_execution_time в php.ini

Просто заметьте, что вы вообще не вызываете функцию mysql_error, замените строку:

echo "Ошибка обновления таблицы pushlog:".mysql_error. "
";

с этим:

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

Более того, то, что вы делаете, - очень плохая практика. Попробуйте создать средство обновления, сохраните свою позицию в сеансе, обновите / обновите страницу и продолжайте с того места, где вы оставили выполнение. И если у вас нет ограничения tim_out в вашем.htaccess, это ничего не значит. И иногда вы можете просто не установить ограничение по времени.

Сначала попробуйте обновить страницу, чтобы увидеть, поможет ли она вам. Вы можете использовать метатег html для этого. или же:

header('Location: thispage.php');

И сделайте каждый шаг вашей программы в запросе.

Другие вопросы по тегам