2010-08-25 2 views
2

У меня есть небольшой Перенаправление скрипт, который делает 2 вещи,Выполнение функции PHP в фоновом режиме

Во-первых, он выполняет по электронной почте (с помощью почты() FUNC) и только затем перенаправляет человека к новой ссылке.

Проблема в том, по какой-то причине, почта FUNC на моем сервере работает действительно очень медленно, и я не хочу, чтобы повлиять на любой из моих посетителей,

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

Спасибо,

ответ

0

Что о вводе почты в базе данных, и запустить хроны для отправки почты?

Таким образом, вы также можете управлять почтовой очередью.

+0

Есть ли более простой способ? У меня не будет столько писем, что мне нужна очередь для ... – Jim

0

Одной из возможностей для этого вида фоновой обработки заключается в использовании какого-то система очередей сообщений (AMQP, ZeroMQ, ...)

0

Существует discussion on php.net о том, как сделать закрыть соединение, но продолжить выполнение вашего скрипта , Он включает в себя буферизацию вывода и отправку HTTP-заголовка Connection: close.

Вы также должны see this question.

0

hm ... если ваш сервер работает в среде * nix, вы можете разветвить процесс с помощью pcntl_fork() и запустить почтовую функцию во вновь создаваемом дочернем процессе и продолжить перенаправление одновременно.

3

Вы можете раскошелиться обрабатывать электронную почту в качестве дочернего процесса: http://us2.php.net/manual/en/function.pcntl-fork.php

Или вы можете написать письмо в базу данных и иметь хрон процесса работы электронной почты после факта.

В зависимости от конфигурации сервера вы можете обнаружить, что вы можете перенаправить пользователя, flush(), а затем отправить письмо и добиться успеха.

0

Я видел это раньше, используя fsockopen. В основном вы делаете вызов страницы, посвященной этой задаче, и передавайте ей все переменные GET, которые вам нужны. Вызванная страница затем проверит некоторые проверки безопасности, такие как убедитесь, что IP находится в белом списке, что аргументы действительны и т. Д.

В зависимости от того, что вы пытаетесь выполнить, это может сделать то, что вам нужно, чтобы ,

Смежные вопросы