2013-08-09 2 views
0

Все, у меня есть сценарий jabber, который автоматически загружает все сообщения для меня в базу данных mysql ... однако, после того, как это было сделано, сценарий все еще остается/хранится ... как я могу выходите ли вы после одного прогона? Пожалуйста, помогите, и любую помощь, которую я могу получить, я был бы очень благодарен!PHP Auto Kill после X минут

<?php 

// activate full error reporting 
//error_reporting(E_ALL & E_STRICT); 

include 'XMPPHP/XMPP.php'; 


$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'username', 'password', 'xmpphp', 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_INFO); 


// $conn->autoSubscribe(); 

$vcard_request = array(); 

try { 
    $conn->connect(); 
    while(!$conn->isDisconnected()) { 
     $payloads = $conn->processUntil(array('message', 'presence', 'end_stream', 'session_start')); 
     foreach($payloads as $event) { 
      $pl = $event[1]; 
      switch($event[0]) { 
       case 'message': 
        print "---------------------------------------------------------------------------------\n"; 
        print "Message from: {$pl['from']}\n"; 
        if($pl['subject']) print "Subject: {$pl['subject']}\n"; 
        print $pl['body'] . "\n"; 
        print "---------------------------------------------------------------------------------\n"; 
        // $conn->message($pl['from'], $body="Thanks for sending me \"{$pl['body']}\".", $type=$pl['type']); 

        $cmd = explode(' ', $pl['body']); 
        if($cmd[0] == 'quit') $conn->disconnect(); 
        if($cmd[0] == 'break') $conn->send("</end>"); 
        if($cmd[0] == 'vcard') { 
         if(!($cmd[1])) $cmd[1] = $conn->user . '@' . $conn->server; 
         // take a note which user requested which vcard 
         $vcard_request[$pl['from']] = $cmd[1]; 
         // request the vcard 
         $conn->getVCard($cmd[1]); 
        } 

       break; 
       case 'presence': 
        print "Presence: {$pl['from']} [{$pl['show']}] {$pl['status']}\n"; 
       break; 
       case 'session_start': 
        print "Session Start\n"; 
        $conn->getRoster(); 
        $conn->presence($status="Cheese!"); 
       break; 
       case 'vcard': 
        // check to see who requested this vcard 
        $deliver = array_keys($vcard_request, $pl['from']); 
        // work through the array to generate a message 
        print_r($pl); 
        $msg = ''; 
        foreach($pl as $key => $item) { 
         $msg .= "$key: "; 
         if(is_array($item)) { 
          $msg .= "\n"; 
          foreach($item as $subkey => $subitem) { 
           $msg .= " $subkey: $subitem\n"; 
          } 
         } else { 
          $msg .= "$item\n"; 
         } 
        } 
        // deliver the vcard msg to everyone that requested that vcard 
        foreach($deliver as $sendjid) { 
         // remove the note on requests as we send out the message 
         unset($vcard_request[$sendjid]); 
         $conn->message($sendjid, $msg, 'chat'); 
        } 
       break; 
      } 
     } 
    } 
} catch(XMPPHP_Exception $e) { 
    die($e->getMessage()); 
} 
?> 
+0

Пожалуйста, отметьте наилучший ответ, как принято, чтобы помочь будущим посетителям. – Ahmad

ответ

0

Я предлагаю вам два способа:
1- Использование функции «set_time_limit», который убивает скрипт после определенных секунд и выдает сообщение об ошибке.
2- Определим переменную перед время цикла и сэкономить время в том, что:

$time=time(); 

В конце цикла в то время как добавить этот код:

if($time+TimeInSeconds<time()) exit(); 

Эти два способа могут остановить сценарий после того, как некоторые секунд. Надеюсь, это поможет.

+0

Вы имеете в виду if ($ time + TimeInSeconds thevoipman

+0

Да, вы правы. Я сделал глупую ошибку! – Ahmad

0

Удалить во время условия и попробуйте. Я думаю, что это сработает.

Замените переменную флагом и добавьте ее во время цикла.

+1

Я сделал это, и он этого не сделал ... этот скрипт должен работать минимум 1-2 минуты, чтобы он работал ... – thevoipman