PHP-скрипт все еще работает на сервере, но отображение веб-страницы остановлено - PullRequest
0 голосов
/ 14 октября 2011

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

1 голос
/ 14 октября 2011

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

KeepAliveTimeout 300

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

0 голосов
/ 15 октября 2011

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

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

с этим:

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

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

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

header('Location: thispage.php');

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

...