shell exec — PHP и фоновые процессы

Я занимаюсь разработкой системы массовой рассылки. За один раз мы отправляем 2-4K электронных писем, почтовые контакты импортируются с использованием библиотеки PHPexcel при том же количестве электронных писем.
Прошлой ночью, когда мы отправляем 2k электронных писем, мы получаем ошибку «500 внутренних серверов».

Я думаю, что мне следует разработать новый процесс обработки электронной почты и импорта контактов, я прав? Если да, то как мне это сделать? Есть ли другой способ преодолеть такие 500 ошибок?

Сценарий PHP вызывается веб-браузером, и браузер загружает его в течение 5-10 минут, а затем возникает ошибка 500. Я использую библиотеку PHPMailer для отправки почты.

-4

Решение

Вызов долгосрочного сценария PHP из веб-браузера не совсем то же самое, что запуск PHP в фоновом режиме. Это заблокирует поток Apache и, вероятно, будет зависеть от таймаутов, настроенных PHP. Я предполагаю, что тайм-аут истекает до завершения отправки.

Было бы лучше сделать это на кроне. Вот несколько общих указателей:

  • Каждые десять минут выбирайте следующий неотправленный набор адресов электронной почты в вашем хранилище данных, возможно, 100 из них.
  • Отправьте электронное письмо каждому, записав в базу данных, что вы сделали
  • Пауза на несколько секунд. Это полезно, так как снижает вероятность того, что ваша почта будет перенаправлена ​​в спам
  • Если ваш скрипт работал более пяти минут, выйдите из него (он будет выполнять следующий набор адресов электронной почты при следующем вызове cron)
  • В противном случае вернитесь к началу

Это будет намного надежнее. Чтобы получить бонусные баллы, напишите веб-страницу, чтобы показать вам, какие электронные письма отправлены, а какие еще ожидают. Кроме того, вы можете использовать стороннюю почтовую систему, такую ​​как MailChimp, повысить надежность доставки. Убедитесь, что все ваши получатели действительно выбрали получение электронной почты от вас.

Я предположил, что скрипт должен группироваться по 100 штук, запускаться в течение пяти минут, вызываться каждые десять минут и приостанавливаться на несколько секунд после каждой отправки — но это всего лишь примеры. Если вы не против отправить медленнее (например, в одночасье), вы можете изменить эти цифры в соответствии с вашими потребностями. Более медленная отправка обычно более надежна, поэтому сделайте это, если можете.

1

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

Других решений пока нет …

По вопросам рекламы [email protected]