proc_open () запускает процесс, заставляет PHP ждать его завершения? - PullRequest
1 голос
/ 11 февраля 2012

Я использую XAMPP 1.7.7 на windows7 (версия PHP 5.3.8) Я использую proc_open () запустить процесс и хочу перенаправить на другую веб-страницу, но PHP будет ждать, пока процесс не закончится. Я не хочу, чтобы запущенный процесс заставил мою сеть ждать этого. Что мне делать?

А мне нужны трубы и возвращаемое значение.

Что мне нужно: Пользователь отправляет что-то на странице A, затем веб-сайт перенаправляет на страницу B (и пользователь может покинуть страницу B). В то же время будут вызваны некоторые процессы, произведут некоторые результаты и обновят базы данных, поэтому, когда пользователь обновит страницу B, будет показан правильный результат. Более того, пользователь может просматривать страницу B в любое время. Я заметил, что комментарий Криса по PHP Manual , его метод может запустить процесс, который независимо от PHP. Но я не знаю, как использовать каналы в процессе скрытия или получить возвращаемое значение.

И я понятия не имею об AJAX, я думаю, что Gearman может работать, но он может быть немного сложным.

Ответы [ 4 ]

0 голосов
/ 12 февраля 2012

Я решил эту проблему, запустив новый PHP для реализации моего запроса.http://www.php.net/manual/en/function.proc-open.php#90584

0 голосов
/ 11 февраля 2012

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

Чтобы установить Gearman в Windows, см. Этот предыдущий вопрос SO и ответы на него: Как настроить или установить GEARMAN в ОС Windows?

0 голосов
/ 11 февраля 2012

Попробуйте посмотреть, ответит ли ваша проблема следующим образом: http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/

0 голосов
/ 11 февраля 2012

PHP является однопоточным по дизайну.Нет никакого способа оставить процесс php запущенным, когда HTTP-запрос завершен.

Сказав это, вы можете использовать AJAX, чтобы делать то, что вы хотите.Вместо одного HTTP-запроса запускайте два запроса одновременно.Один из них будет содержать длинный процесс (вместе с set_time_limit(0)).

Есть много разных способов сделать это.Обычно я делаю следующее: когда я получаю первоначальный запрос, я немедленно отвечаю HTML-страницей, содержащей автоматический вызов AJAX для второго php-файла, который содержит длинный процесс.Так что все счастливы: пользователь видит немедленный ответ, и длительный процесс может занять время, так как никто не ждет.

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