Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php文件\u get\u内容执行两次_Php_File Get Contents - Fatal编程技术网

php文件\u get\u内容执行两次

php文件\u get\u内容执行两次,php,file-get-contents,Php,File Get Contents,我创建了一个脚本,用于将备份磁带签入磁带库,并使用TSM将其签入。此脚本由SMS激活 我们的SMS服务器接收启动签入的命令,然后使用file\u get\u contents命令在TSM服务器上执行脚本 我有一个问题,即当分配了要签入的磁带(+20)时,脚本将执行两次。这会导致TSM服务器出错,因为移动媒体命令都是双精度的 我克服了这个问题,在启动第一个文件内容时加入了初始时间戳日志记录,这样命令就不会执行两次。尽管这解决了双重命令问题,但仍然会出现问题,因为SMS服务器会发回脚本是否已启动的确

我创建了一个脚本,用于将备份磁带签入磁带库,并使用TSM将其签入。此脚本由SMS激活

我们的SMS服务器接收启动签入的命令,然后使用file\u get\u contents命令在TSM服务器上执行脚本

我有一个问题,即当分配了要签入的磁带(+20)时,脚本将执行两次。这会导致TSM服务器出错,因为移动媒体命令都是双精度的

我克服了这个问题,在启动第一个文件内容时加入了初始时间戳日志记录,这样命令就不会执行两次。尽管这解决了双重命令问题,但仍然会出现问题,因为SMS服务器会发回脚本是否已启动的确认信息。这意味着,在每次使用+20个磁带签入时,操作员都会收到两条消息,一条消息说签入失败,另一条消息开始签入

我怀疑这是由于将命令传递到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();
    }
}
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多个磁带中出现时才会发生。