2012-02-11 4 views
1

windows7에서 XAMPP 1.7.7을 사용합니다. (PHP 버전 5.3.8) proc_open()을 사용하여 프로세스를 실행하고 다른 웹 페이지로 리디렉션하려고하지만 PHP는 프로세스가 완료 될 때까지 대기합니다. 실행중인 프로세스가 내 웹을 기다리는 것을 원하지 않습니다. 어떻게해야합니까?proc_open() 프로세스를 실행하여 PHP가 완료 될 때까지 기다리십시오.

그리고 파이프와 반환 값이 필요합니다.

내가 필요한 것 : 사용자가 페이지 A에 무엇인가를 제출하면 웹은 페이지 B로 리디렉션되고 사용자는 페이지 B를 떠날 수 있습니다. 동시에 일부 프로세스가 호출되어 일부 결과가 생성되고 데이터베이스가 업데이트되므로 사용자가 페이지 B를 새로 고칠 때 올바른 결과가 표시됩니다. 더 많은 것은 무엇이든, 사용자는 언제든지 페이지 B를 전망 할 수있다. 내가 PHP Manual에 크리스의 의견은, 그의 방법은 내가 숨기기 과정에 파이프를 사용하거나 반환 값을 얻는 방법을 모르는 PHP.But와 독립적 인 프로세스를 실행할 수 있다는 것을 알 수 있습니다.

나는 AJAX에 대해 전혀 몰라, 제 생각에는 Gearman이 잘 작동한다고 생각하지만, 다소 복잡 할 수 있습니다.

답변

0

PHP는 설계 상 단일 스레드입니다. HTTP 요청이 끝나면 PHP 프로세스를 실행중인 채로 둘 수는 없습니다.

그렇다면 AJAX를 사용하여 원하는 것을 할 수 있습니다. 하나의 HTTP 요청을하는 대신 두 개의 요청을 동시에 발생시킵니다. 그 중 하나에는 긴 프로세스가 포함됩니다 (set_time_limit(0) 포함).

이렇게하는 데는 여러 가지 방법이 있습니다. 보통 내가하는 일은 다음과 같습니다. 초기 요청을 받으면 긴 프로세스가 포함 된 두 번째 PHP 파일에 대한 자동 AJAX 호출을 포함하는 HTML 페이지로 즉시 응답합니다. 따라서 모든 사람은 행복합니다. 즉, 사용자는 즉각적인 응답을 보게되며 긴 프로세스는 아무도 기다리지 않고 시간이 걸릴 수 있습니다.

+0

감사합니다.하지만 지금은 알지 못합니다. – power

0

Gearman과 같은 작업 대기열을 사용하여 작업자를 실행 상태로 남겨두고 리디렉션 할 페이지에서 나중에 상태에 대해 질의 할 수 있도록해야합니다.

Windows에서 Gearman을 설치하려면이 이전 SO 질문과 답변 참조하십시오 How to configure or install GEARMAN in windows OS?

+0

고맙습니다. 나는 이것을 시도 할 것입니다. – power

관련 문제