用php解压缩文件

Bos*_*nBB 186 php unzip

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

system('unzip File.zip');
Run Code Online (Sandbox Code Playgroud)

但我需要通过URL传递文件名,并且无法使其工作,这就是我所拥有的.

$master = $_GET["master"];
system('unzip $master.zip'); 
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我知道它必须是一个小而愚蠢的东西,我在俯视.

谢谢,

rdl*_*rey 473

我只能假设您的代码来自某个在线教程?在那种情况下,努力想要自己解决这个问题.另一方面,这个代码实际上可以在某个地方在线发布作为解压缩文件的正确方法这一事实有点令人恐惧.

PHP具有用于处理压缩文件的内置扩展.应该没有必要使用system这个调用.ZipArchivedocs是一种选择.

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

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

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

始终保持SANITIZE用户输入.


UPDATE

根据您的评论,将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";
}
Run Code Online (Sandbox Code Playgroud)

  • 那么,脚本的当前工作目录与zip文件所在的目录之间存在差异.如果zip文件与脚本位于同一目录中,您可以执行`$ zip-> extractTo('./');`但是,情况可能并非如此.更好的选择是确定zip文件在文件系统中的位置并将其解压缩到那里.我会更新我的答案来证明. (2认同)
  • @CWSpear你将[需要底层的`zlib`](http://www.php.net/manual/en/zip.requirements.php)库来执行几乎所有的PHP压缩/解压缩操作.即使进行系统调用,您也需要拥有底层库.这是一个非常普遍的事情,并没有它是例外.如果您在共享主机上,他们应该为您安装它.否则,只需谷歌"如何安装PHP的Zip函数支持" (2认同)

Ale*_*tic 35

请不要这样做(将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
}
Run Code Online (Sandbox Code Playgroud)

并回答你的问题,你的错误是"$ var something something"应该是"some var something something"(用双引号).

  • +1哎呀,抱歉在五分钟后基本上同样的答案.没见到你:) (3认同)

Rub*_*byx 7

使用getcwd()在同一目录提取

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


Mor*_*yae 5

我将@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> 
Run Code Online (Sandbox Code Playgroud)


小智 5

只需尝试将此yourDestinationDir提取到目标位置,或删除-d yourDestinationDir提取到根目录。

$master = 'someDir/zipFileName';
$data = system('unzip -d yourDestinationDir '.$master.'.zip');
Run Code Online (Sandbox Code Playgroud)


Far*_*ick 5

PHP 有自己的内置类,可用于解压缩或从 zip 文件中提取内容。该类是 ZipArchive。下面是简单且基本的 PHP 代码,它将提取 zip 文件并将其放置在特定目录中:

<?php
$zip_obj = new ZipArchive;
$zip_obj->open('dummy.zip');
$zip_obj->extractTo('directory_name/sub_dir');
?>
Run Code Online (Sandbox Code Playgroud)

如果您想要一些高级功能,那么下面是改进的代码,它将检查 zip 文件是否存在:

<?php
$zip_obj = new ZipArchive;
if ($zip_obj->open('dummy.zip') === TRUE) {
   $zip_obj->extractTo('directory/sub_dir');
   echo "Zip exists and successfully extracted";
}
else {
   echo "This zip file does not exists";
}
?>
Run Code Online (Sandbox Code Playgroud)

来源:如何在 PHP 中解压或提取 zip 文件?