2015-01-23 2 views
1

У меня есть сценарий, который использует while(true) для запуска, поэтому он работает вечно, пока он не умрет.Как повторять что-то каждые 3 минуты в бесконечном цикле?

Я хочу, чтобы он мог отправлять сообщение один раз каждые 3 минуты и повторно подключать все разъединения, как я могу это сделать?

Сценарий работает на сервере Jabber с помощью PHP хостинга, так что это сбивает с толком, и я не знаю, как сделать это делать каждые 3 минуты и автоматическое повторное соединение во время отключения, потому что, если я использую sleep() или usleep() в сценарий будет стекать, а сценарий автоответчика не будет запущен.

Так как я могу это сделать? Может кто-нибудь мне помочь?

try { 
    while(!$this->disconnect()) { 
    $this->connect(); 
    while(!$this->isDisconnected()) { 
     $starts = $this->processUntil(array('message', 'session_start')); 
     foreach($starts as $go) { 
     $new = $go[1]; 
     switch($go[0]) { 
      case 'session_start': 
      break; 
      case 'message': 
      $filter = $show="online"; 
      if($new['from'] == $filter) { 
       $sender = explode('@', $new['from']); 
       $this->message($new['from'], $body="Auto Respond Message: Sorry $sender[0] Iam Not Here Right Now", $type="chat"); 
      } 
      $the_time = time(); 
      $interval = 3*60; 
      while(true) { 
       if ($the_time + $interval >= time()) { 
       $this->message($myself, $body="PING !!!", $type="chat"); 
       $the_time = time(); 
       } 
       $this->presence($status="ONLINE !!!", $show="online"); 
      } 
      break; 
     } 
     } 
    } 
    } 
} catch(XMPPHP_Exception $e) { 
    die($e->getMessage()); 
} 
+2

Возможно, вы ищете флеш() – donald123

ответ

2

Используйте функцию сна: http://php.net/manual/en/function.sleep.php

// sleep for 30 seconds 
sleep(30); 
+0

, если я использую сон (180) или usleep (180000000), сценарий сообщения автоответчика не будет запущен. Я уже пытаюсь это кстати. –

+0

Вы уверены, что ваш сценарий не убит из-за его выключения? – Jono20201

+0

да уверенный брат. Если скрипт может отправлять сообщения PING каждые 3 минуты. Потому что в основном этот скрипт для автоматического ответа. –

0

вы можете использовать спящий режим();

echo $statement1; 
sleep(180); 
echo $statement2; 
+0

OP специально говорит, что он не может использовать сон – CocoNess

0

Попробуйте что-то вроде этого:

<?php 

while (@ob_end_flush()); 
try { 
    while (!$this->disconnect()) { 
     $this->connect(); 
     while (!$this->isDisconnected()) { 
      $starts = $this->processUntil(array('message', 'session_start')); 
      foreach ($starts as $go) { 
       $new = $go[1]; 
       switch ($go[0]) { 
        case 'session_start': 
         break; 
        case 'message': 
         $filter = $show = "online"; 
         if ($new['from'] == $filter) { 
          $sender = explode('@', $new['from']); 
          $this->message($new['from'], $body = "Auto Respond Message: Sorry $sender[0] Iam Not Here Right Now", $type = "chat"); 
         } 
         $the_time = time(); 
         $interval = 3 * 60; 
         while (true) { 
          if ($the_time + $interval >= time()) { 
           $this->message($myself, $body = "PING !!!", $type = "chat"); 
           ob_flush(); 
           flush(); 
           $the_time = time(); 
          } 
          $this->presence($status = "ONLINE !!!", $show = "online"); 
         } 
         break; 
       } 
      } 
     } 
    } 
} catch (XMPPHP_Exception $e) { 
    die($e->getMessage()); 
} 
+0

Все еще не заставляйте скрипт отправлять сообщение PING каждые 3 минуты брату, но спасибо. –

0

Используйте петлю и повторить текст со сном;

// sleep for 20 seconds 
while(true) 
{ 
    echo "text here!"; 
    sleep(20); 
} 

Будет эхо текст 3 раза за 1 минуту.

Смежные вопросы