На форме отправить фоновую функцию PHP работает - PullRequest
1 голос
/ 22 мая 2009

Я ищу способ запустить функцию отправки формы, которая не оставляла бы окно браузера в ожидании результата.

Пример: Пользователь заполняет форму и нажимает «отправить», данные из формы через javascript отправляются в базу данных, и запускается функция в php, которая займет несколько секунд, но я не хочу, чтобы пользователь оставался в ожидании завершения этой функции. Я хотел бы иметь возможность перенести его на другую страницу и оставить функцию, выполняющую свои функции на стороне сервера.

Есть мысли?

Спасибо


Спасибо за все ответы ...

Я получил часть AJAX. Но я не могу вызвать ajax и заставить браузер перейти на другую страницу.

Это то, что я хотел.

- Пользователь заполняет форму и отправляет -Результат от формы, переданной в базу данных -длинная раздражающая функция запускается -пользователь продолжает посещать остальную часть сайта, независимо от статуса в «функции длительного раздражающего процесса»

Кстати, и до того, как кто-то предложит это. Нет, cron не может сделать это

Ответы [ 5 ]

3 голосов
/ 22 мая 2009

Используйте AJAX для вызова сценария php, и в верхней части сценария включите ignore_ user_ abort .

ignore_user_abort(true);

Таким образом, если они уйдут со страницы, скрипт продолжит работу в фоновом режиме. Вы также можете использовать

set_time_limit(0);

для установки ограничения по времени, полезно, если вы знаете, что выполнение сценария займет некоторое время.

1 голос
/ 22 мая 2009

Ах, хорошо, ну, по сути, вы спрашиваете, поддерживает ли PHP многопоточность, и общий ответ - нет ... однако ...

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

exec()

метод. Вы также можете посмотреть здесь;

Поток PHP

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

1 голос
/ 22 мая 2009

Наиболее распространенный метод:

exec("$COMMAND > /dev/null 2>&1 &");
0 голосов
/ 22 мая 2009

Звучит так, будто вы хотите использовать некоторые функции, которые предлагает AJAX (асинхронный Javascript и XML - google).

По сути, у вас будет страница с контентом. Когда пользователь нажимает кнопку, javascript используется для отправки данных на сервер и начала обработки. Одновременно этот javascript может загрузить страницу с сервера и затем отобразить ее (например, загрузить данные, а затем заменить содержимое DIV на эту новую страницу.)

Этот вид вещей - предпосылка AJAX, которую вы видите везде, когда у вас есть веб-страница, выполняющая несколько вещей одновременно.

Стоит отметить: это не означает, что скрипт работает «в фоновом режиме на сервере». Ваш веб-браузер все еще поддерживает соединение с веб-сервером - это означает, что код работает в «фоновом режиме» на стороне клиента . И под «фоном» мы действительно подразумеваем «обработку HTTP-запроса параллельно с другими HTTP-запросами, чтобы создать ощущение« фонового »запущенного процесса»

0 голосов
/ 22 мая 2009

Это именно то, для чего предназначен AJAX (сокращение от асинхронного JavaScript + XML);

AJAX Информация

Позволяет кодировать, используя код на стороне клиента, и отправлять асинхронные запросы на ваш сервер, чтобы браузер пользователя не прерывал весь запрос страницы.

В Интернете есть много информации, касающейся AJAX, так что сделайте глубокий вдох и погуглите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...