rafael
Новичок
Нужно запустить процедуру, и продолжить работу не дожидаясь её окончания.
Алгоритм моего скрипта:
1. пользователь заполняет форму добавления нового элемента в БД.
2. скрипт обрабатывает POST-входящие, и добавляет (INSERT INTO) запись в таблицу БД.
3. скрипт выполняет SQL-запрос, который на основании добавленной записи, делает UPDATE в других записях. время выполнения несколько секунд.
4. скрипт завершает работу.
Проблема: Из-за пункта 3, пользователю приходится долго ждать окончания работы скрипта, чтобы продолжить работу с интерфейсом.
Задача: отправить пункт 3 выполняться параллельно и, не дожидаясь результатов его выполнения, завершить работу скрипта.
Я вижу только такие решения:
1. Вынести процедуру (функцию) в отдельный скрипт, доступный по http. Использовать file_get_contents и в заголовках (с помощью stream_context_create()) прописать минимальный таймаут ожидания ответа от сервера.
2. Вынести процедуру (функцию) в отдельный скрипт и запускать его посредством exec() с добавлением амперсанда в конце коммандной строки. Например, "fget http://blablabla/1/ &" или "php c:/web/blablabla/1.php &"
Но! Всё это как то не красиво, хаки какие то. Может в php есть возможность параллельной обработки функций? Может я что-то упустил? Если, нет, то я хоть буду знать, что по другому никак.
Спасибо.
Алгоритм моего скрипта:
1. пользователь заполняет форму добавления нового элемента в БД.
2. скрипт обрабатывает POST-входящие, и добавляет (INSERT INTO) запись в таблицу БД.
3. скрипт выполняет SQL-запрос, который на основании добавленной записи, делает UPDATE в других записях. время выполнения несколько секунд.
4. скрипт завершает работу.
Проблема: Из-за пункта 3, пользователю приходится долго ждать окончания работы скрипта, чтобы продолжить работу с интерфейсом.
Задача: отправить пункт 3 выполняться параллельно и, не дожидаясь результатов его выполнения, завершить работу скрипта.
Я вижу только такие решения:
1. Вынести процедуру (функцию) в отдельный скрипт, доступный по http. Использовать file_get_contents и в заголовках (с помощью stream_context_create()) прописать минимальный таймаут ожидания ответа от сервера.
2. Вынести процедуру (функцию) в отдельный скрипт и запускать его посредством exec() с добавлением амперсанда в конце коммандной строки. Например, "fget http://blablabla/1/ &" или "php c:/web/blablabla/1.php &"
Но! Всё это как то не красиво, хаки какие то. Может в php есть возможность параллельной обработки функций? Может я что-то упустил? Если, нет, то я хоть буду знать, что по другому никак.
Спасибо.
Главное не забыть правильно лочить элементы.