下载文件的时间延迟不同


different time delaying to download files

我有一个php函数,它发送一个linux命令来压缩一些选定的文件。然后下载该文件。

$command = "zip data ";
foreach($_POST['checkbox'] as $key=>$llogfile){     
    $command = $command . $llogfile . ' ';
}
$stream = ssh2_exec($connection, $command);
stream_set_blocking($stream, true); 
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
//sleep(1);
$file = 'data.zip';
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$filetype = finfo_file($finfo, $file);
header('Content-Description: File Transfer');
header('Cache-Control: public');
header('Content-Type: '.$filetype);
header("Content-Transfer-Encoding: binary");
header('Content-Disposition: attachment; filename='. basename($file));
header('Content-Length: '.filesize($file));
ob_clean();
flush();
readfile($file);

如果禁用sleep(),则下载.zip文件时不包含任何文件。我认为这可能是因为服务器上压缩文件的处理时间。

我的 isse 如下:由于用户选择要压缩的文件数量,因此压缩时间可能会有所不同,因此,sleep(999)似乎不是一个好的解决方案,并且当选择大量文件时sleep(1)可能无法正常工作。

在下载文件之前,有没有更简单的方法来等待命令执行?

重要:我无法在 php 端压缩文件,必须这样做。安全性并不重要,因为这用于个人目的。

抱歉,还不能发表评论,但是:

等待命令完成在 PHP 中使用 SSH2_Shell

所以你也可以做同样的事情:

 while (true){
        $data .= stream_get_contents($stream);
        if (strpos($data,"XOXO") !== false) {
            echo "okay: command finished'n";
            break;
        }
    }
    echo $data;
    fclose($stream);

只需将"XOXO"替换为zip命令返回流的内容即可

希望对您有所帮助