2013-10-21 4 views
0

이 질문에 대한 대답은 "아니오"라고 대답 할 수 있지만 가능합니다. Wordpress 사이트 내에 Gravity Forms 양식이 있습니다. 사용자가 양식을 제출 한 후에 실행하여 일부 추가 데이터를 수집하는 기능이 있습니다.PHP의 백그라운드에서 시작 함수

Gravity Forms/Wordpress 부품이 제 질문과 매우 관련이 있다고 생각하지 않지만, stackoverflow의 모든 사람들이 일부 코드를보고 싶어한다는 것을 알고 있습니다. :) functions.php 내부 내가 사용하는 내 양식의 "제출 후"이벤트 후크 :

add_action("gform_after_submission_15", "gravityforms_collectreportdata", 10, 2); 

이 기능 다음은 다음을

function gravityforms_collectreportdata($entry, $form) { 
ScanForMissingData($entry["post_id"]); 
} 

문제는 ScanForMissingData는 약간의 시간이 소요되며, 사용자 있다는 것입니다 "form submitted"메시지를 받기 전에 끝내기를 기다리게됩니다. 실제로 나는 사용자가 이것을 기다릴 필요가 없다. 난 그냥 서버에서 실행을 시작하고 사용자가 물건을 얻을 수 있도록하고 싶습니다. 나는 이상적으로 다음과 같이하고 싶다 :

function gravityforms_collectreportdata($entry, $form) { 
StartInBackground(ScanForMissingData, $entry["post_id"]); 
} 

또는 일부. PHP에서도 가능합니까?

+0

나는 그것을 얻지 않는다고 생각한다. 그러나 나는 PHP가 스레딩을 지원한다고 생각하지 않는다. 클라이언트 데이터를 지속적으로 얻으려면 자바 스크립트를 통해 일정 간격을 설정할 수 있습니다. – Carlos

답변

0

흠, 아니, 아니요 ;-) 사실 내가 생각할 수있는 몇 가지 방법이 있습니다.

먼저 호스트에 대한 셸 액세스 권한이 있거나 적어도 누군가가 사용자를 위해 cron 항목을 설치할 수있는 경우 가장 좋을 것입니다. 그런 다음 기능을 cronjob에 맡기고 양식 데이터를 일종의 대기열에 기록하십시오.

불가능합니다. 예, 양식 제출 응답을 데이터 수집을 시작하기 전에 전송하십시오. 응답 페이지 (또는 Ajax 응답이 무엇이든간에)를 반향하고, flush()를 수행하고 (예, flush()를 수행하기 전에 약 1024 바이트의 여유 오버 헤드를 추가 한 후) 데이터 수집을 시작하십시오. 너무 화려하지 않고 여전히 웹 서버의 시간 제한 설정에 따라 다르지만 사용자는 시간 내에 응답을 보입니다.