php文件\u get\u内容执行两次
我创建了一个脚本,用于将备份磁带签入磁带库,并使用TSM将其签入。此脚本由SMS激活 我们的SMS服务器接收启动签入的命令,然后使用file\u get\u contents命令在TSM服务器上执行脚本 我有一个问题,即当分配了要签入的磁带(+20)时,脚本将执行两次。这会导致TSM服务器出错,因为移动媒体命令都是双精度的 我克服了这个问题,在启动第一个文件内容时加入了初始时间戳日志记录,这样命令就不会执行两次。尽管这解决了双重命令问题,但仍然会出现问题,因为SMS服务器会发回脚本是否已启动的确认信息。这意味着,在每次使用+20个磁带签入时,操作员都会收到两条消息,一条消息说签入失败,另一条消息开始签入 我怀疑这是由于将命令传递到TSM服务器所需的时间(最多需要45秒)造成的 长话短说,有没有办法设置更长的超时时间,或者提供任何参数/检查来防止这种行为?提前谢谢。路径替换为******php文件\u get\u内容执行两次,php,file-get-contents,Php,File Get Contents,我创建了一个脚本,用于将备份磁带签入磁带库,并使用TSM将其签入。此脚本由SMS激活 我们的SMS服务器接收启动签入的命令,然后使用file\u get\u contents命令在TSM服务器上执行脚本 我有一个问题,即当分配了要签入的磁带(+20)时,脚本将执行两次。这会导致TSM服务器出错,因为移动媒体命令都是双精度的 我克服了这个问题,在启动第一个文件内容时加入了初始时间戳日志记录,这样命令就不会执行两次。尽管这解决了双重命令问题,但仍然会出现问题,因为SMS服务器会发回脚本是否已启动的确
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();
}
}
if(isset($\u GET['exec'])){
如果(isset($\u GET['remote'])){
$rcs=CheckRemoteCheckinStatus();
$to=$_GET['sender'];
//执行drm签入
$commit=CheckButtonStatus();
如果($commit==”“和$rcs==0){
SetRemoteCheckinStatus();
$psDIR=“*******”;
$psScript=“drm\u checkin\u retrieve.ps1”;
$runCMD=$psPath.'-ExecutionPolicy RemoteSigned'.$psDIR.$psScript;
exec($runCMD,$out);
SetCheckinStatus();
$psDIR=“*******”;
$psScript=“QueueSMS.ps1$到“签入格式塔…”;
$runCMD=$psPath.'-ExecutionPolicy RemoteSigned'.$psDIR.$psScript;
exec($runCMD,$out);
}
否则{
//发送失败的短信
$psDIR=“*******”;
$psScript=“QueueSMS.ps1$to‘Fout:Geen签入mogelijk’”;
$runCMD=$psPath.'-ExecutionPolicy RemoteSigned'.$psDIR.$psScript;
exec($runCMD,$out);
}
}
否则{
$psDIR=“*******”;
$psScript=“drm\u checkin\u retrieve.ps1”;
$runCMD=$psPath.'-ExecutionPolicy RemoteSigned'.$psDIR.$psScript;
exec($runCMD,$out);
回显“签入格式塔…
”;
SetCheckinStatus();
}
}
如果您有权访问php.ini,这将非常有用
如果只想在特定脚本中增加超时,可以使用
或者,在php脚本的开头:
ini_set('max_execution_time', 120); //120 seconds
你在任何地方都逃不掉。学习使用urlencode、escapeshellarg和htmlentieshi、thx作为提示,但是执行此命令的脚本是命令行deamon,其标准执行时间应设置为inlimited。所以脚本本身似乎没有超时,它只是再次发送文件内容,然后按照设计继续脚本。不过,我将对此进行测试,看看它是否有什么不同。我正在尝试使用ini_集(“默认套接字超时”,900);因为我希望这会有更大的效果。我们会得到反馈。(只能在mo、wed、fri上测试)您的执事是在while循环策略中,还是通过cron作业调用?是否有可能在短时间内调用脚本两次?执事在无限while循环中运行。收到SMS后,它会在数据库中将其标记为已读,以防止再次调用脚本。这种行为只有在20多个磁带中出现时才会发生。