我有一个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端压缩文件,必须这样做。安全性并不重要,因为它被用于个人目的。
答案 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命令返回流的东西
希望它有用