我创建了一个脚本来检查备份磁带到我们的磁带库中,并用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();
}
}
你不会在任何地方逃脱任何东西。学习使用urlencode和escapeshellarg和htmlentities – hanshenrik