2016-08-08 1 views
2

Я создал скрипт для проверки в лентах резервного копирования в нашу ленточную библиотеку и проверил их с помощью TSM. Этот скрипт активируется с помощью SMS.php file_get_contents выполняет дважды

Наш сервер SMS получает команду для запуска регистрации, а затем выполняет скрипт на сервере TSM с помощью команды file_get_contents.

У меня проблема с тем, что сценарий выполняется дважды, когда есть лотки для регистрации (+20). Это приводит к ошибкам на сервере TSM, потому что перемещение медиа-команд также двойное.

Я преодолел это, введя вечный журнал регистрации времени при первом запуске файла file_get_content, так что команды arent выполняются дважды. Несмотря на то, что это исправляет проблему с двойной командой, она все еще представляет проблему, потому что сервер SMS отправляет обратно подтверждение, что скрипт запущен или нет. Таким образом, это означает, что при каждой проверке с помощью +20 лент оператор получает 2 сообщения, 1 говорит, что проверка не удалась, другая проверка началась.

Я подозреваю, что это вызвано из-за времени, которое требуется для передачи команд на сервер TSM (может занимать до 45 секунд).

Короче говоря, есть ли способ установить какой-то более продолжительный тайм-аут или дать какие-либо параметры/проверки, чтобы предотвратить это поведение? Заранее спасибо. Пути заменяются на *****.

SMS server code 
    //DRM checkin 
      if($auth == 1 AND strtolower($sms_body) == "******"){ 
       $knowncommand = 1; 
       $url = "http://*******/******/checkin.php?remote&exec&sender=" . $from; 
       $dodrm = file_get_contents($url); 
       if ($stmt2 = $mysqli->prepare("UPDATE messagein SET checked = 1 WHERE checked = 0 ")) { 
        $stmt2->execute(); 
        $stmt2->close(); 
       } 
      } 

TSM код сценария сервера:

if(isset($_GET['exec'])){ 
    if(isset($_GET['remote'])){ 
     $rcs = CheckRemoteCheckinStatus(); 
     $to = $_GET['sender']; 
     //Execute drm check-in 
     $commit = CheckButtonStatus(); 
     if($commit == "" AND $rcs == 0){ 
      SetRemoteCheckinStatus(); 
      $psDIR = "*****"; 
      $psScript = "drm_checkin_retrieve.ps1"; 
      $runCMD = $psPath. ' -ExecutionPolicy RemoteSigned '.$psDIR.$psScript; 
      exec($runCMD, $out); 
      SetCheckinStatus(); 
      $psDIR = "*****"; 
      $psScript = "QueueSMS.ps1 $to 'Check-in gestart...'"; 
      $runCMD = $psPath. ' -ExecutionPolicy RemoteSigned '.$psDIR.$psScript; 
      exec($runCMD, $out); 
     } 
     else{ 
      //Send Failed SMS 
      $psDIR = "*****"; 
      $psScript = "QueueSMS.ps1 $to 'Fout: Geen Check-in mogelijk.'"; 
      $runCMD = $psPath. ' -ExecutionPolicy RemoteSigned '.$psDIR.$psScript; 
      exec($runCMD, $out); 
     } 
    } 
    else{ 
     $psDIR = "*******"; 
     $psScript = "drm_checkin_retrieve.ps1"; 
     $runCMD = $psPath. ' -ExecutionPolicy RemoteSigned '.$psDIR.$psScript; 
     exec($runCMD, $out); 
     echo "Check-in gestart...<br><br>"; 
     SetCheckinStatus(); 
    } 
} 
+0

Вы ничего не избегаете нигде. научитесь использовать urlencode и escapeshellarg и htmlentities – hanshenrik

ответ

0

Если у вас есть доступ к php.ini, это topic может быть полезным

Если вы хотите увеличить свой тайм-аут только в конкретном сценарии , вы можете использовать set_time_limit

Или по-другому, в начале вашего скрипта php:

ini_set('max_execution_time', 120); //120 seconds 
+0

Привет, thx для подсказки, однако скрипт, который выполняет это, является деамоном командной строки, а стандартное время выполнения для этого должно быть установлено как неограниченное. Кроме того, сам скрипт не кажется тайм-аутом, он просто отправляет файл_get_contents снова, а затем продолжает работать со сценарием, как он был разработан. Я, однако, испытаю это, чтобы увидеть, что это имеет значение. –

+0

Я пытаюсь использовать ini_set ('default_socket_timeout', 900); так как я ожидаю, что это будет иметь больший эффект. Вернется с обратной связью. (можно только проверить это на mo, wed, fri) –

+1

Является ли ваш деамон в стратегии цикла while или вызван через работу cron? Есть ли вероятность, что сценарий называется дважды - это короткое время? – shabang

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