2016-08-08 86 views
2

我创建了一个脚本来检查备份磁带到我们的磁带库中,并用TSM检查它们。此脚本由SMS激活。php file_get_contents执行两次

我们的SMS服务器接收到启动签入的命令,然后使用file_get_contents命令在TSM服务器上执行脚本。

我有一个问题,当有磁带分配到(+20)时,脚本正在执行两次。这会导致TSM服务器出错,因为移动介质命令也是双倍的。

当第一个file_get_content启动时,我通过放入一个初始化时间戳记录来克服这个问题,所以这些命令不会执行两次。 Allthough这修复了双重命令问题,但它仍然存在问题,因为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的提示,但执行此脚本是一个命令行deamon,并且它的标准执行时间应该已被设置为限制。所有脚本本身似乎都不会超时,它只是再次发送file_get_contents,然后继续使用设计的脚本。然而,我会对此进行测试,看看它是否有所作为。 –

+0

我想用ini_set('default_socket_timeout',900);因为我预计会有更多的效果。将回来的反馈。 (只能在mo,wed,fri上测试这个) –

+1

你的deamon处于while循环策略,还是通过cron工作调用?脚本被调用两次的机会是否很短? – shabang