我想解压缩一个文件,这工作得很好

system('unzip File.zip');

但我需要通过URL传递文件名,不能让它工作,这就是我所拥有的。

$master = $_GET["master"];
system('unzip $master.zip'); 

我错过了什么?我知道一定是我忽视的小而愚蠢的事情。

谢谢你!


当前回答

简单地尝试这个yourDestinationDir是目的地提取到或删除-d yourDestinationDir提取到根目录。

$master = 'someDir/zipFileName';
$data = system('unzip -d yourDestinationDir '.$master.'.zip');

其他回答

使用getcwd()在同一目录中进行解压缩

<?php
$unzip = new ZipArchive;
$out = $unzip->open('wordpress.zip');
if ($out === TRUE) {
  $unzip->extractTo(getcwd());
  $unzip->close();
  echo 'File unzipped';
} else {
  echo 'Error';
}
?>

请不要这样做(将GET var作为系统调用的一部分)。用ZipArchive代替。

所以,你的代码应该是这样的:

$zipArchive = new ZipArchive();
$result = $zipArchive->open($_GET["master"]);
if ($result === TRUE) {
    $zipArchive ->extractTo("my_dir");
    $zipArchive ->close();
    // Do something else on success
} else {
    // Do something on error
}

为了回答你的问题,你的错误是“something $var something else”应该是“something $var something else”(双引号)。

我只能假设你的代码来自网上的某个教程?在这种情况下,你靠自己解决问题做得很好。另一方面,这段代码实际上可以作为解压缩文件的正确方式在某个地方在线发布,这一事实有点令人恐惧。

PHP具有处理压缩文件的内置扩展。不需要为此使用系统调用。ZipArchivedocs是一种选择。

$zip = new ZipArchive;
$res = $zip->open('file.zip');
if ($res === TRUE) {
  $zip->extractTo('/myzips/extract_path/');
  $zip->close();
  echo 'woot!';
} else {
  echo 'doh!';
}

另外,正如其他人所评论的那样,$HTTP_GET_VARS自4.1版本以来已被弃用…那是很久以前的事了。不要用它。请使用$_GET超全局变量。

最后,要非常小心地接受通过$_GET变量传递给脚本的任何输入。

总是清理用户输入。


更新

根据您的评论,将zip文件解压缩到其所在的同一目录的最佳方法是确定文件的硬路径,并将其专门解压缩到该位置。所以,你可以这样做:

// assuming file.zip is in the same directory as the executing script.
$file = 'file.zip';

// get the absolute path to $file
$path = pathinfo(realpath($file), PATHINFO_DIRNAME);

$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
  // extract it to the path we determined above
  $zip->extractTo($path);
  $zip->close();
  echo "WOOT! $file extracted to $path";
} else {
  echo "Doh! I couldn't open $file";
}

我更新了@rdlowrey的答案,以一个更干净和更好的代码,这将解压文件到当前目录使用__DIR__。

<?php 
    // config
    // -------------------------------
    // only file name + .zip
    $zip_filename = "YOURFILENAME.zip";
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8' >
    <title>Unzip</title>
    <style>
        body{
            font-family: arial, sans-serif;
            word-wrap: break-word;
        }
        .wrapper{
            padding:20px;
            line-height: 1.5;
            font-size: 1rem;
        }
        span{
            font-family: 'Consolas', 'courier new', monospace;
            background: #eee;
            padding:2px;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <?php
        echo "Unzipping <span>" .__DIR__. "/" .$zip_filename. "</span> to <span>" .__DIR__. "</span><br>";
        echo "current dir: <span>" . __DIR__ . "</span><br>";
        $zip = new ZipArchive;
        $res = $zip->open(__DIR__ . '/' .$zip_filename);
        if ($res === TRUE) {
          $zip->extractTo(__DIR__);
          $zip->close();
          echo '<p style="color:#00C324;">Extract was successful! Enjoy ;)</p><br>';
        } else {
          echo '<p style="color:red;">Zip file not found!</p><br>';
        }
        ?>
        End Script.
    </div>
</body>
</html> 

只改变

system('unzip $master.zip');

到这个

system('unzip ' . $master . '.zip');

或者这个

系统(“{$大师}. zip解压缩”);