SMS를 보내는 PHP 스크립트가 있습니다. 문제는 모든 SMS를 보내기 전에 시간이 걸리는 것입니다. 내 사이트에서이 스크립트는 스크립트 실행이 완료 될 때까지 대기합니다. SMS를 보내고 사이트의 정상 작동을 재개하라는 메시지를 사용자에게 제공하려면 어떻게해야합니까?스크립트가 완료 될 때까지 기다리지 마십시오.
답변
여기서 유일한 문제는 브라우저에 스크립트가 없을 때 더 많은 스크립트가 출력되기를 기다리는 것입니다. 당신은 별도의 프로세스에 오프로드, 또는 비동기 웹 호출을 사용하거나 단순히 수 .....
<?php
register_shutdown_function('when_alls_done');
.... // render page
exit;
function when_alls_done()
{
if ($_REQUEST['send_to_phone']) {
send_sms($_REQUEST['send_to_phone'], $_REQUEST['message']);
}
}
웹 서버에서의 '출구'에서 요청을 세척해야하고 브라우저 알려 수있는 응답 (PHP 코드에서 명시 적으로 플러시를하면 웹 서버 버퍼를 플러시하지 않거나 다른 청크로 인코딩 된 출력을 청크로 가져 오게됩니다).
C.
대신 SMS를 보내면 어딘가에 저장할 수 있습니다 (예 : 데이터베이스). 그런 다음 데이터베이스를 폴링하여 SMS를 보내고 보내도록 추가 스크립트 (PHP 또는 원하는 다른 것)를 작성할 수 있습니다. 이 작업은 OS에 따라 cron 또는 예약 된 작업을 통해 x 초 또는 분마다 실행될 수 있습니다. 이렇게하면 적시에 사용자와 통신하는 작업에서 시간이 많이 걸리는 작업을 수행 할 수 있습니다.
당신이
- 중인 SMS에 대한 (데이터베이스) 큐를 쿼리합니다 cron 작업을 작성하고 보내 LAMP에있는 경우.
- 스크립트에 SMS를 대기열에 추가하십시오.
- 다른 페이지에 SMS의 사용자 상태를 표시합니다.
- Ajax를 사용하면 백그라운드에서 최근에 전송 된 SMS의 상태를 쿼리 할 수 있습니다. 알림을 보낸 사용자가 표시되면 즉시.
데이터베이스의 큐에 메시지를 넣으십시오. 그런 다음 백그라운드에서 cron 작업으로 스크립트를 실행하여 대기열을 관리하십시오.
원칙적으로 그것의 좋은 실제로는 cron 작업을 사용하여 메시지를 대기열에 추가하지 않으면 잘 확장되지 않으며 추가 기능적 문제가 발생할 수 있습니다. 더 나은 해결책은 전용 데몬이 될 것입니다 - 이전에는 BSD lpd를 사용하여 사용자 정의 "프린터 드라이버"로 SMS 대기열을 관리했습니다 - 그러나 다른 곳에서는 이것을 처리하기 위해 비동기 요청을 사용했습니다 – symcbean
아약스을 사용할 수 있습니다. 일부 버튼을 누르기 만하면 sms를 보내기 위해 성형 된 PHP 파일에 아약스 요청을 보냅니다. 화면에 'SMS 보내기!'와 같은 알림을 넣으십시오. 그리고 아약스 조치의 응답에 '성공 sms'를 변경 .... !!!
당신은 jquery .. 비디오 자습서에 대한 코멘트를 내게 모르는 경우 jquery .. 아약스 사용하실 수 있습니다 ... jquery에 대한 초보자 용 비디오 튜토리얼이 있습니다. ...
좋은 하루 되세요 !!!!!
하지만 보내기에서 ignore_user_abort()를 확인하십시오 스크립트를 쓰지 않으면 스크립트를 실행하십시오. – symcbean
당신이 알고있을 때 그것은 매우 쉬운 방법은 다음과 같습니다
<?php
echo 'A sms will be sent!';
fastcgi_finish_request();
// Put all your time consuming code here!
?>
- 1. 프로세스가 종료 될 때까지 기다리지 마십시오.
- 2. 프로세스가 배치 스크립트로 완료 될 때까지 기다리지 않는 방법은 무엇입니까?
- 3. 이전 기능이 완료 될 때까지 기다리지 않고 기능이 실행됩니다.
- 4. 세 프로세스를 동기화 할 때까지 기다리지 마십시오.
- 5. Javascript : 스크립트가 완료 될 때까지 body onload 함수가 대기합니다.
- 6. 명령 줄 스크립트가 완료 될 때까지 MATLAB이 반환되지 않게하려면 어떻게합니까?
- 7. 자바 스크립트가 완료 될 때까지 스팬 (또는 div) 숨기기
- 8. 활동 완료 메소드가 완료 될 때까지 대기합니까?
- 9. 이벤트가 완료 될 때까지 블로킹
- 10. 이벤트가 완료 될 때까지 차단하십시오.
- 11. 명령을 실행하고 완료 될 때까지 기다립니다. C#
- 12. 자식 창로드가 완료 될 때까지 기다리는 중
- 13. Fork() : 자식이 종료 될 때까지 반환하지 마십시오.
- 14. 스레드가 완료 될 때까지 프로그램 실행을 중지하십시오.
- 15. NSXMLParser :로드가 완료 될 때까지 어떻게 대기해야합니까?
- 16. AsyncTask가 완료 될 때까지 ProgressDialog가 표시되지 않습니다.
- 17. 비활성화 에어로가 완료 될 때까지 대기
- 18. 이벤트가 완료 될 때까지 대기하는 방법
- 19. JS 함수가 완료 될 때까지 onclick을 비활성화하십시오.
- 20. 작업이 완료 될 때까지 qsub 블록을 만드시겠습니까?
- 21. Executor의 모든 스레드가 완료 될 때까지 기다리시겠습니까?
- 22. 스레드가 실행 완료 될 때까지 기다리는 중
- 23. 복사가 완료 될 때까지 xcopy가 일시 중지됩니까?
- 24. 모든 프로세스가 완료 될 때까지 대기
- 25. Java 스레드가 완료 될 때까지 기다려주십시오.
- 26. 웹 요청이 완료 될 때까지 기다림
- 27. COM Interop - Excel이 완료 될 때까지 기다립니다.
- 28. 요청이 완료 될 때까지 액션 스크립트 블록
- 29. 스트림 쓰기가 완료 될 때까지 대기하는 방법
- 30. 두 개의 스레드가 완료 될 때까지 대기
* (관련) * http://stackoverflow.com/search?q=asynchronous+php – Gordon