我創建了一個腳本來檢查備份磁帶到我們的磁帶庫中,並用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