Javascript Zip文件-下载-然后解压缩

Javascript Zip文件-下载-然后解压缩,javascript,php,unzip,zipfile,Javascript,Php,Unzip,Zipfile,我真的很困惑。下面是我的项目进展情况。用户单击下载,然后选择目录保存文件,该文件将是一个zip文件。之后,我想在用户选择的同一目录中解压缩该zip文件。这在一个脚本中可能吗 这是我的php代码 <?php require_once('connect.php'); // Get real path for our folder $rootPath = realpath($_GET['uniq']); // Name of the zip derive from the database

我真的很困惑。下面是我的项目进展情况。用户单击下载,然后选择目录保存文件,该文件将是一个zip文件。之后,我想在用户选择的同一目录中解压缩该zip文件。这在一个脚本中可能吗

这是我的php代码

<?php 
require_once('connect.php');
// Get real path for our folder
$rootPath = realpath($_GET['uniq']);

// Name of the zip derive from the database
$zipname = $_GET['name'] . '.zip';
// Initialize archive object
$zip = new ZipArchive();
$zip->open($zipname, ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        // Add current file to archive
        $zip->addFile($filePath, $relativePath);
    }   
}

// Zip archive will be created only after closing object
$zip->close();
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);
?>


如果不可能的话,另一个问题。是否可以让用户选择一个zip文件,然后使用javascript将其解压缩到某个客户端目录,即
C://xamp/extracthere/

一旦用户将该文件下载到他们的机器上,您将无法控制该文件。你不能强迫他们解压它,或者为此做任何其他事情


想象一下,如果你能控制用户本地磁盘上的文件,那将是黑客的梦想。这不可能同时使用PHP和JavaScript,因为在每种情况下都有类似的原因。

您不能强制客户机解压缩负载。一旦他们下载了有效载荷,他们就可以决定如何处理它。想想看,你甚至不知道客户端是否安装了解压器,更不用说它是什么(一个命令行工具,WinZip,等等),想想这场大屠杀,如果我在zip文件中包含恶意负载,它可能会确保。@GordonM我实际上是在创建一个用户无法访问驱动器的软件。我需要在软件中完成这一切。我明白你想说什么。因此,我遇到了另一个解决方案,其中用户必须选择他/她想要提取的zip文件。到目前为止,它对我来说是成功的。感谢您在私有文件和用户之间添加一个网守层是非常好的,这是非常常见的做法,但是仍然无法强制客户端解压缩负载。浏览器是故意这样设计的。@GordonM试过了,使用Unzippers模块工作得很好。catch是指用户必须将zip文件保存在指定的目录中,在这种情况下,行为仍取决于客户端。他们必须安装此解扣模块,并将其下载到正确的位置。你也不能保证。