2009-05-22 3 views
1

Я ищу способ запуска функции в форме submit, которая не покидает окно браузера, ожидающего результата.On form submit background function php running

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

Любые мысли?

Благодаря


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

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

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

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

Кстати, и прежде чем кто-то подскажет это. Нет, это не может быть сделано хрон

ответ

3

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

ignore_user_abort(true); 

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

set_time_limit(0); 

, чтобы указать срок, полезный, если вы знаете, что ваш скрипт займет некоторое время.

+0

классно ... Мне это нравится :) –

1

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

exec("$COMMAND > /dev/null 2>&1 &"); 
+0

Как установить это на мой код? ? –

+0

hugo, то есть код на стороне сервера, т.е. код, который отвечает на запрос браузера и который находится на сервере. Вы говорите о клиентском коде (вероятно, javascript), и в этом случае см. Ответы ниже, касающиеся AJAX – simon622

+0

Это также вариант, хотя, как правило, веб-разработчики стараются избегать при создании «повседневных» приложений. Наличие скрипта PHP для выполнения команд оболочки может создать большие риски безопасности. Например, если «команда» - «кошка», и пользователю разрешено предоставить файл кошке, можно было бы выполнить «cat/etc/passwd», что может быть нежелательным! – poundifdef

0

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

AJAX Information

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

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

0

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

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

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

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

1

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

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

exec() 

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

PHP threading

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