php file_get_contents执行两次

时间:2016-08-08 13:13:26

标签: php file-get-contents

我创建了一个脚本来检查备份磁带到我们的磁带库中并使用TSM检查它们。此脚本由SMS激活。

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

我有一个问题,即当有大量要检入的磁带时,脚本正在执行两次(+20)。这会导致TSM服务器出错,因为移动媒体命令也是双倍的。

我通过在第一个file_get_content启动时输入初始时间戳记录来克服这个问题,因此命令没有执行两次。尽管这解决了双重命令问题,但它仍然存在问题,因为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 Server脚本代码:

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();
    }
}

1 个答案:

答案 0 :(得分:0)

如果您有权访问php.ini,则此topic可能非常有用

如果您只想在特定脚本中增加超时,可以使用set_time_limit

或者换句话说,在php脚本的开头:

Tag       Parameter  isHLOP  isHHAOPT
--------  ---------  ------  --------
AI17611A  HLPR           -1        -1
AI17611B  HLPR           -1         0
AI17611C  HLPR            0        -1