2010-07-28 6 views
1

SMS를 보내는 PHP 스크립트가 있습니다. 문제는 모든 SMS를 보내기 전에 시간이 걸리는 것입니다. 내 사이트에서이 스크립트는 스크립트 실행이 완료 될 때까지 대기합니다. SMS를 보내고 사이트의 정상 작동을 재개하라는 메시지를 사용자에게 제공하려면 어떻게해야합니까?스크립트가 완료 될 때까지 기다리지 마십시오.

+0

* (관련) * http://stackoverflow.com/search?q=asynchronous+php – Gordon

답변

2

여기서 유일한 문제는 브라우저에 스크립트가 없을 때 더 많은 스크립트가 출력되기를 기다리는 것입니다. 당신은 별도의 프로세스에 오프로드, 또는 비동기 웹 호출을 사용하거나 단순히 수 .....

<?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.

0

대신 SMS를 보내면 어딘가에 저장할 수 있습니다 (예 : 데이터베이스). 그런 다음 데이터베이스를 폴링하여 SMS를 보내고 보내도록 추가 스크립트 (PHP 또는 원하는 다른 것)를 작성할 수 있습니다. 이 작업은 OS에 따라 cron 또는 예약 된 작업을 통해 x 초 또는 분마다 실행될 수 있습니다. 이렇게하면 적시에 사용자와 통신하는 작업에서 시간이 많이 걸리는 작업을 수행 할 수 있습니다.

0

당신이

  1. 중인 SMS에 대한 (데이터베이스) 큐를 쿼리합니다 cron 작업을 작성하고 보내 LAMP

    에있는 경우.
  2. 스크립트에 SMS를 대기열에 추가하십시오.
  3. 다른 페이지에 SMS의 사용자 상태를 표시합니다.
  4. Ajax를 사용하면 백그라운드에서 최근에 전송 된 SMS의 상태를 쿼리 할 수 ​​있습니다. 알림을 보낸 사용자가 표시되면 즉시.
2

데이터베이스의 큐에 메시지를 넣으십시오. 그런 다음 백그라운드에서 cron 작업으로 스크립트를 실행하여 대기열을 관리하십시오.

+1

원칙적으로 그것의 좋은 실제로는 cron 작업을 사용하여 메시지를 대기열에 추가하지 않으면 잘 확장되지 않으며 추가 기능적 문제가 발생할 수 있습니다. 더 나은 해결책은 전용 데몬이 될 것입니다 - 이전에는 BSD lpd를 사용하여 사용자 정의 "프린터 드라이버"로 SMS 대기열을 관리했습니다 - 그러나 다른 곳에서는 이것을 처리하기 위해 비동기 요청을 사용했습니다 – symcbean

0

아약스을 사용할 수 있습니다. 일부 버튼을 누르기 만하면 sms를 보내기 위해 성형 된 PHP 파일에 아약스 요청을 보냅니다. 화면에 'SMS 보내기!'와 같은 알림을 넣으십시오. 그리고 아약스 조치의 응답에 '성공 sms'를 변경 .... !!!

당신은 jquery .. 비디오 자습서에 대한 코멘트를 내게 모르는 경우 jquery .. 아약스 사용하실 수 있습니다 ... jquery에 대한 초보자 용 비디오 튜토리얼이 있습니다. ...

좋은 하루 되세요 !!!!!

+0

하지만 보내기에서 ignore_user_abort()를 확인하십시오 스크립트를 쓰지 않으면 스크립트를 실행하십시오. – symcbean

0

당신이 알고있을 때 그것은 매우 쉬운 방법은 다음과 같습니다

<?php 
    echo 'A sms will be sent!'; 

    fastcgi_finish_request(); 

// Put all your time consuming code here! 

?> 
관련 문제