延迟下载文件的不同时间

时间:2015-01-06 17:11:40

标签: php

我有一个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文件。我想这可能是因为在服务器上压缩文件的处理时间。

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

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

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

1 个答案:

答案 0 :(得分:0)

很抱歉,暂不公开评论,但是:

Waiting for command to finish using SSH2_Shell in PHP

所以你也可以这样做:

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

只需更换" XOXO"用zip命令返回流的东西

希望它有用