выполнение — PHP-скрипт перестает работать с недоступным сервисом 503

У меня есть свой собственный скрипт PHP для отправки бюллетеня. Это сработало отлично. Недавно мой хостинг-провайдер указал мне квоту уважения: 30 писем в минуту. Итак, между каждой отправкой почты я вставляю sleep(2);,

После этого изменения через 5 минут (300 секунд) скрипт останавливается и возвращает:

Сервис недоступен

Сервер временно не может обслуживать ваш запрос из-за простоев или проблем с пропускной способностью. Пожалуйста, попробуйте позже.
Кроме того, при попытке использовать ErrorDocument для обработки запроса произошла ошибка 503 Service Unavailable.

Четыре наблюдения.

  1. В начале моего сценария я поместил эти две строки:

    ignore_user_abort(true);
    set_time_limit(0);
    

    Итак, проблема не в переменной max_execution_time (я проверяю: она действительно изменена).

  2. Скрипт корректно работает на localhostгде переменные ini PHP более ограничены, чем на моем веб-хосте. Таким образом, проблема исходит не от memory_limit переменная.

  3. Я думал, что это может быть предел переменной Apache Timeout (300). Но мой хост-провайдер скептически относится к этому …

  4. Сервер работает на PHP 5.5.

Что может быть причиной этого?

Скрипт ранее (он работает с PHPMailer):

// all email addresses
while ($row = $result->fetch_array())
{
// ...

if ($mail->send())
{
echo "success : " . $row["mail"] . "<br/>";
}
else
{
echo "error : " . $row["mail"] . " - " . $mail->ErrorInfo . "<br/>";
}
}

После :

// all email addresses
while ($row = $result->fetch_array())
{
...

if ($mail->send())
{
echo "success : " . $row["mail"] . "<br/>";
}
else
{
echo "error : " . $row["mail"] . " - " . $mail->ErrorInfo . "<br/>";
}

sleep(2);
}

3

Решение

Я думаю на сервере используются mod_fastcgi или equals.

Посмотрите на этот старый пост http://www.binarytides.com/php-set-time-limit/

Например, у mod_fastcgi есть опция с именем «-idle-timeout», которая контролирует время простоя скрипта. Так что если сценарий ничего не выводит в обработчик fastcgi в течение этого количества секунд, то fastcgi завершит его. Настройка выглядит примерно так:

Apache <-> mod_fastcgi <-> php processes

Вы должны использовать очередь и crontab, которые очередь обрабатывает один раз в минуту.

Надеюсь это поможет.

1

Другие решения

Это может быть несколько вещей, даже права доступа к файлу. Сначала я отменил бы ваши изменения и посмотрел, работает ли он снова. Если нет, то вы знаете, что это не команда sleep (), вызывающая проблему. Если это команда sleep, проблема может быть связана с тайм-аутом в ожидании ответа php. Вместо этого попробуйте спать в течение 0,1 секунды, просто чтобы проверить, работает ли он.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector