2012-12-01 3 views
0

무료 라이브러리 this을 사용하여 PHP를 통해 SMPP 연결을 설정하고 있습니다. 나는이 브라우저 창에서 스크립트를 실행하고 주어진 60 초 이내에 정확하게 내 휴대 전화에서 SMS를 보낼 때 그것은 잘 완벽하게 작동SMPP 연결

<?php 
    $GLOBALS['SMPP_ROOT'] = dirname(__FILE__); // assumes this file is in the root 
    require_once $GLOBALS['SMPP_ROOT'].'/protocol/smppclient.class.php'; 
    require_once $GLOBALS['SMPP_ROOT'].'/transport/tsocket.class.php'; 

    // Construct transport and client 
    $transport = new TSocket('your.smsc.com',2775); 
    $transport->setRecvTimeout(60000); // for this example wait up to 60 seconds for data 
    $smpp = new SmppClient($transport); 

    // Activate binary hex-output of server interaction 
    $smpp->debug = true; 

    // Open the connection 
    $transport->open(); 
    $smpp->bindReceiver("USERNAME","PASSWORD"); 

    // Read SMS and output 
    $sms = $smpp->readSMS(); 
    echo "SMS:\n"; 
    var_dump($sms); 

    // Close connection 
    $smpp->close(); 
?> 

: 메시지를 수신하기 위해, 나는 예에서 주어진 다음 코드를 사용하고 있습니다 , 그러나 나는 오랫동안 그것을 작동시키는 방법을 꽤 이해하지 못한다. 실제 상황과 마찬가지로 SMS를받을 때 백그라운드에서 실행되어 일부 이벤트가 트리거되어야합니다. 어떻게해야합니까? 이제는 SMS를 받기 위해 매번 페이지를 새로 고쳐야하며 한 번만 작동합니다. 미리 감사드립니다.

+1

적절한 http 또는 html 헤더를 작성하는 것이 좋습니다. 둘 중 가장 적합한 방법이 매분마다 새로 고침됩니다. – chris

+0

setRecvTimeout을 (-1) –

+0

@SamuelCook으로 설정해 보았습니까?이 작업은 한 번만 계속됩니다. – nicks

답변

1

브라우저에서 솔루션을 실행해야하는 경우 스크립트에서 직접 SMPP 서버에 연결하지 않아야합니다. 단일 사용자 시나리오로 이어질 것입니다.

readSMS 호출을 무한 루프시키면서 데몬으로 실행되는 콘솔 응용 프로그램으로 만들어야합니다. 그런 다음 readSMS의 결과를 데이터베이스에 기록하고 웹 응용 프로그램에서이 값을 읽습니다. 이걸 사용하면 html 새로 고침이나 멋진 아약스를 사용하여 데이터베이스를 쿼리하고 들어오는 SMS를 표시 할 수 있습니다.

일반적으로 SMS 또는 enquire_link (enquire_link_resp가 응답해야 함 - 라이브러리가 자동으로 처리해야 함)를 수신하기 때문에 SMPP 수신기 연결이 소켓에서 차단 모드로 실행됩니다 (시간 제한 없음). SMS를 읽고 처리 (데이터베이스에 저장)하고 readSMS를 다시 호출하면 다음 SMS가 수신 될 때까지 차단됩니다.

0

"백그라운드로 실행하고 일부 이벤트를 트리거하십시오" 이 작업을 인간의 노력없이 대부분 수행하려면 cronjob (s)을 사용하여 필요한 스크립트를 호출하여 작업을 수행하는 것이 가장 좋습니다. 감사합니다.